美文网首页
Node.js_后端路由(一)

Node.js_后端路由(一)

作者: learninginto | 来源:发表于2020-03-01 00:11 被阅读0次

Node.js_后端路由(一)

路由指的就是我们要针对不同的URL有不同的处理方式。

  • JS在处理URL时,req.url中的pathname就是用户请求的路径,query就是get请求时用户传递的参数。所以说pathname就是路由的核心

    req.url.png
  • 读取服务端的文件时,需要通过content-type反馈给客户端,告诉它读取的文件是什么类型的。

    例如:

    res.writeHead(200, { "contentType": "text/html;charset=utf8" });

    res.writeHead(200, { "content-type": "application/x-javascript;charset=utf8" });

    res.writeHead(200, { "content-Type": "application/JSON;charset=utf-8" })

  • 请求图片时,使用正则表达式的子匹配项来区分请求的图片名和后缀。

    if (/\/img\/(.*)\.(jpg|png|gif)/.test(pathname)) {
        fs.readFile(path.join(__dirname, "./public/img/" + RegExp.$1 + "." + RegExp.$2), (err, data) => {
            res.writeHead(200, { "content-type": "image/" + RegExp.$2 });
            res.end(data);
        })
    
  • 测试数据存放在json文件中

    json数据.png
  • 登录注册的node代码

const http = require("http");
const path = require("path");
const fs = require("fs");
const url = require("url");
const server = http.createServer((req, res) => {
    // console.log(url.parse(req.url, true))
    const { pathname, query } = url.parse(req.url, true);

    if (pathname === "/") {

        fs.readFile(path.join(__dirname, "./public/index.html"), (err, data) => {
            res.writeHead(200, { "contentType": "text/html;charset=utf8" });
            res.end(data);
        })

    } else if (pathname === "/order") {
        fs.readFile(path.join(__dirname, "./public/html/order.html"), (err, data) => {
            res.writeHead(200, { "contentType": "text/html;charset=utf8" });
            res.end(data);
        })
    } else if (pathname === "/list") {
        fs.readFile(path.join(__dirname, "./public/html/list.html"), (err, data) => {
            res.writeHead(200, { "contentType": "text/html;charset=utf8" });
            res.end(data);
        })
    } else if (/\/css\/(.*)\.css/.test(pathname)) {
        fs.readFile(path.join(__dirname, "./public/css/" + RegExp.$1 + ".css"), (err, data) => {
            res.writeHead(200, { "content-type": "text/css;charset=utf8" });
            res.end(data);
        })
    } else if (/\/js\/(.*)\.js/.test(pathname)) {
        fs.readFile(path.join(__dirname, "./public/js/" + RegExp.$1 + ".js"), (err, data) => {
            res.writeHead(200, { "content-type": "application/x-javascript;charset=utf8" });
            res.end(data);
        })
    } else if (/\/img\/(.*)\.(jpg|png|gif)/.test(pathname)) {
        fs.readFile(path.join(__dirname, "./public/img/" + RegExp.$1 + "." + RegExp.$2), (err, data) => {
            res.writeHead(200, { "content-type": "image/" + RegExp.$2 });
            res.end(data);
        })
    } else if (pathname === "/users/register") {
        let { username, password } = query;
        fs.readFile(path.join(__dirname, "./public/data/user.json"), (err, data) => {
            let userData = JSON.parse(data.toString());
            var bStop = true;

            for (var i = 0; i < userData.data.length; i++) {
                if (userData.data[i].username === username) {
                    bStop = false;
                    break;
                }
            }
            if (bStop) {
                userData.data.push({ username, password });
                fs.writeFile(path.join(__dirname, "./public/data/user.json"), JSON.stringify(userData), (err) => {
                    if (!err) {
                        res.writeHead(200, { "content-Type": "application/json;charset=utf-8" })
                        res.end(JSON.stringify({
                            code: 200,
                            errMsg: "",
                            data: {
                                code: 1,
                                info: "注册成功"
                            }
                        }))
                    }
                })
            } else {
                res.writeHead(200, { "content-Type": "application/json;charset=utf-8" })
                res.end(JSON.stringify({
                    code: 200,
                    errMsg: "",
                    data: {
                        code: 0,
                        info: "用户名重复"
                    }
                }))
            }
        })
    }
    else if (pathname === "/users/login") {
        let { username, password } = query;
        var resObj = {
            code: 200,
            errMsg: ""
        }
        fs.readFile(path.join(__dirname, "./public/data/user.json"), (err, data) => {
            let userData = JSON.parse(data.toString());
            var loginStop = 0;
            for (var i = 0; i < userData.data.length; i++) {
                if (userData.data[i].username === username) {
                    loginStop = 2;
                    if (userData.data[i].password === password) {
                        loginStop = 1;
                        break;
                    }
                }
            }
            res.writeHead(200, { "content-Type": "application/JSON;charset=utf-8" })
            if (loginStop === 1) {
                // userData.data.push({ username, password });
                resObj.data = {
                    code: 1,
                    info: "登录成功,跳转主页!"
                }
            } else if (loginStop === 2) {
                resObj.data = {
                    code: 0,
                    info: "用户密码错误!"
                }
            } else {
                resObj.data = {
                    code: 0,
                    info: "用户不存在!"
                }
            }
            res.end(JSON.stringify(resObj))
        })
    }
})

server.listen(9000, () => {
    console.log("server address:127.0.0.1:9000")
})

相关文章

  • Node.js_后端路由(二)

    Node.js_后端路由(二) 接着上一篇Node.js_后端路由(一)进行改进优化,有困惑之处可以回头查漏补缺。...

  • Node.js_后端路由(一)

    Node.js_后端路由(一) 路由指的就是我们要针对不同的URL有不同的处理方式。 JS在处理URL时,req....

  • Vue3: 前端路由的概念和原理

    1、什么是路由 路由(英文:router)就是对应关系。路由分为两大类:① 后端路由② 前端路由 2、后端路由 后...

  • 第三十一节:Vue路由:前端路由vs后端路由的了解

    1. 认识前端路由和后端路由 前端路由相对于后端路由而言的, 在理解前端路由之前先对于路由有一个基本的了解 路由:...

  • Vue前端路由

    1 - 后端路由和前端路由 路由是一个比较广义和抽象的概念,路由的本质就是对应关系,在开发中,路由分为:后端路由、...

  • JavaScript--路由

    1、路由 (扩展) 对应的开发者来说 路由是一个很重要的东西。(前端路由)(后端路由) 2、后端路由 根据对应的接...

  • 探究vue-router的源码

    一个vue路由的工作流程 前端路由和后端路由的区别 后端路由输入url --> 请求发送到服务器 --> 服务...

  • 路由

    1、路由的本质就是对应关系。 2、路由分为前端路由和后端路由。 3、后端路由根据不同的用户url请求,返回不同的资...

  • 路由以及什么是动态路由

    路由: 先说下前端路由和后端路由。 后端中,采用的是后端渲染模式,就是在他的router中接收到了哪一项就会去寻找...

  • vue路由

    前端路由和后端路由,前端渲染和后端渲染 1. 后端路由:对于普通的网站,所有的超链接都是URL地址,所有的URL地...

网友评论

      本文标题:Node.js_后端路由(一)

      本文链接:https://www.haomeiwen.com/subject/dednhhtx.html