博客
关于我
Nodejs教程09:实现一个带接口请求的简单服务器
阅读量:792 次
发布时间:2023-02-16

本文共 4193 字,大约阅读时间需要 13 分钟。

带接口请求的简单服务器需求

虽然当前还未涉及到数据库的知识,但已经可以通过文件读写,实现一个简单的服务器,满足以下需求:

  • 用户通过GET方法请求/reg接口,实现注册流程。
  • 用户通过POST方法请求/login接口,实现登录流程。
  • 对于非接口请求,直接返回相应文件。
  • 实现思路

  • 新建users.json文件,用于存放用户列表数据。
  • 新建index.html文件,实现表单及注册、登录的前端请求功能。
  • 服务端根据请求路径判断请求类型,决定是通过接口校验用户数据,还是直接返回HTML文件。
  • 对于接口请求,通过用户列表判断用户状态,实现注册和登录流程。
  • 代码及示例

    进入/lesson09文件夹,运行node server.js命令,在浏览器访问即可查看效果。

    index.html代码如下

        
    服务器开发示例

    用户:

    密码:

    server.js代码如下

    const http = require('http');const url = require('url');const fs = require('fs');const querystring = require('querystring');const server = http.createServer((req, res) => {    const method = req.method;    let path = '';    let get = {};    let post = {};    if (method === 'GET') {        const { pathname, query } = url.parse(req.url, true);        path = pathname;        get = query;        handleRequest();    } else if (method === 'POST') {        path = req.url;        let arr = [];        req.on('data', (buffer) => {            arr.push(buffer);        });        req.on('end', () => {            try {                const buffer = Buffer.concat(arr);                post = JSON.parse(buffer.toString());                handleRequest();            } catch (error) {                console.error('解析POST数据失败,' + error.message);                res.writeHead(500);                res.end();            }        });    } else {        handleRequest();    }    function handleRequest() {        try {            if (path === '/reg') {                const { username, password } = get;                fs.readFile('./users.json', (error, data) => {                    if (error) {                        res.writeHead(404);                    } else {                        const users = JSON.parse(data.toString());                        const usernameIndex = users.findIndex(item => item.username === username);                        if (usernameIndex >= 0) {                            res.write(JSON.stringify({ error: 1, msg: '此用户名已存在' }));                        } else {                            users.push({ username, password });                            fs.writeFile('./users.json', JSON.stringify(users), (error) => {                                if (error) {                                    res.writeHead(404);                                } else {                                    res.write(JSON.stringify({ error: 0, msg: '注册成功' }));                                }                                res.end();                            });                        }                    }                });            } else if (path === '/login') {                const { username, password } = post;                fs.readFile('./users.json', (error, data) => {                    if (error) {                        res.writeHead(404);                    } else {                        const users = JSON.parse(data.toString());                        const usernameIndex = users.findIndex(item => item.username === username);                        if (usernameIndex >= 0) {                            if (users[usernameIndex].password === password) {                                res.write(JSON.stringify({ error: 0, msg: '登录成功' }));                            } else {                                res.write(JSON.stringify({ error: 1, msg: '密码错误' }));                            }                        } else {                            res.write(JSON.stringify({ error: 1, msg: '该用户不存在' }));                        }                    }                    res.end();                });            } else {                fs.readFile(`.${path}`, (error, data) => {                    if (error) {                        res.writeHead(404);                    } else {                        res.write(data);                    }                    res.end();                });            }        } catch (error) {            console.error('处理请求出错,' + error.message);            res.writeHead(500);            res.end();        }    }});server.listen(8080);

    总结

    以上代码示例展示了如何通过Node.js实现一个简单的服务器,支持注册和登录功能。前端通过HTML文件和JavaScript实现用户输入的接口请求,后端通过JavaScript处理请求并根据路径和数据类型返回相应的响应。

    转载地址:http://sxjfk.baihongyu.com/

    你可能感兴趣的文章
    netfilter应用场景
    查看>>
    netlink2.6.32内核实现源码
    查看>>
    Netpas:不一样的SD-WAN+ 保障网络通讯品质
    查看>>
    NetScaler的常用配置
    查看>>
    netsh advfirewall
    查看>>
    NETSH WINSOCK RESET这条命令的含义和作用?
    查看>>
    Netty WebSocket客户端
    查看>>
    netty 主要组件+黏包半包+rpc框架+源码透析
    查看>>
    Netty 异步任务调度与异步线程池
    查看>>
    Netty中集成Protobuf实现Java对象数据传递
    查看>>
    Netty事件注册机制深入解析
    查看>>
    Netty原理分析及实战(四)-客户端与服务端双向通信
    查看>>
    Netty客户端断线重连实现及问题思考
    查看>>
    Netty工作笔记0006---NIO的Buffer说明
    查看>>
    Netty工作笔记0007---NIO的三大核心组件关系
    查看>>
    Netty工作笔记0011---Channel应用案例2
    查看>>
    Netty工作笔记0013---Channel应用案例4Copy图片
    查看>>
    Netty工作笔记0014---Buffer类型化和只读
    查看>>
    Netty工作笔记0020---Selectionkey在NIO体系
    查看>>
    Vue踩坑笔记 - 关于vue静态资源引入的问题
    查看>>