博客
关于我
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/

    你可能感兴趣的文章
    nginx添加模块与https支持
    查看>>
    Nginx用户认证
    查看>>
    Nginx的location匹配规则的关键问题详解
    查看>>
    Nginx的Rewrite正则表达式,匹配非某单词
    查看>>
    Nginx的使用总结(一)
    查看>>
    Nginx的使用总结(三)
    查看>>
    Nginx的使用总结(二)
    查看>>
    Nginx的可视化神器nginx-gui的下载配置和使用
    查看>>
    Nginx的是什么?干什么用的?
    查看>>
    nginx看这一篇文章就够了
    查看>>
    Nginx简单介绍
    查看>>
    Nginx访问控制_登陆权限的控制(http_auth_basic_module)
    查看>>
    nginx负载均衡和反相代理的配置
    查看>>
    nginx负载均衡器处理session共享的几种方法(转)
    查看>>
    nginx负载均衡的5种策略(转载)
    查看>>
    nginx负载均衡的五种算法
    查看>>
    nginx转发端口时与导致websocket不生效
    查看>>
    Nginx运维与实战(二)-Https配置
    查看>>
    Nginx配置Https证书
    查看>>
    Nginx配置ssl实现https
    查看>>