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

Node.js_后端路由(二)

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

Node.js_后端路由(二)

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

  • 通过routerMap收集事件

    const routerMap = {
        get:{},
        post:{}
    }
    
  • router.get/router.post注册事件

    • index.js

      一旦页面中的URL地址发生改变,就会触发createServer()函数。

      注册事件包含两个参数,第一个参数是path路径,第二个参数是回调函数。

      const http = require("http");
      const router = require("./router")
      const server = http.createServer(router)
      
      router.post("/user/register", (req, res) => {
          res.json({
              code: 200,
              errMsg: ''
          })
      })
      
      server.listen(9000)
      

      通过上面的router.post将事件注册到routerMap中。

    router.get = function(path,callback){
        routerMap.get[path] = callback;
    }
    router.post = function(path,callback){
        routerMap.post[path] = callback;
    }
    
  • router.js

    const url = require("url");
    const fs = require("fs");
    const path = require("path");
    const qs = require("querystring")
    //收集事件
    const routerMap = {
        get: {},
        post: {}
    }
    
    const router = function (req, res) {
        //给res添加一个json方法
        res.json = function (obj) {
            res.end(JSON.stringify(obj))
        }
    
        //处理静态资源,在上一篇文章Node.js_后端路由(一)中提到
        handleStatic(req, res);
    
        //获取用户请求的方式
        var method = req.method.toLowerCase();
        //获取用户请求的地址
        var { pathname, query } = url.parse(req.url, true);
    
        if (method === "get") {
            if (routerMap.get[pathname]) {
                //将query的值赋值给req.query
                req.query = query;
                routerMap.get[pathname](req, res)
            } else {
                res.end("404")
            }
    
    
        } else if (method === "post") {
            if (routerMap.post[pathname]) {
                var str = "";
    
                //获取post传递的参数
                req.on("data", (data) => {
                    str += data;
                })
    
                req.on("end", () => {
                    req.body = qs.parse(str);
                    routerMap.post[pathname](req, res)
                })
            }
        }
    }
    
    //注册事件
    router.get = function (path, callback) {
        routerMap.get[path] = callback;
    }
    //注册事件
    router.post = function (path, callback) {
        routerMap.post[path] = callback;
    }
    
    //处理所有的静态资源访问
    function handleStatic(req, res) {
        var { pathname } = url.parse(req.url, true);
        //获取文件的后缀,使用lastIndexOf找最后的“.”更为严谨
        var ext = pathname.substring(pathname.lastIndexOf("."));
    
        if (pathname === "/") {
            res.writeHead(200, { "content-type": "text/html;charset=utf8" });
            res.end(getFile(path.join(__dirname, "../public/index.html")))
        } else if (ext === ".css") {
            res.writeHead(200, { "content-type": "text/css;charset=utf8" });
            res.end(getFile(path.join(__dirname, "../public", pathname)));
        } else if (ext === ".js") {
            res.writeHead(200, { "content-type": "application/x-javascript;charset=utf8" });
            res.end(getFile(path.join(__dirname, "../public", pathname)));
    
        } else if (/.*\.(jpg|png|gif)/.test(ext)) {
            res.writeHead(200, { "content-type": `image/${RegExp.$1};charset=utf8` });
            res.end(getFile(path.join(__dirname, "../public", pathname)));
        } else if (ext === ".html") {
            res.writeHead(200, { "content-type": "text/html;charset=utf8" });
            res.end(getFile(path.join(__dirname, "../public", pathname)));
        }
    } 
    
    function getFile(filePath) {
        return fs.readFileSync(filePath);
    }
    
    module.exports = router;
    
    
  • 将简易版的路由发布到npm网站中

    • 在终端登录npm
    1. npm login

    2. 输入用户名

    3. 输入密码,10位以上(注意:密码不可见,全凭感觉)

    4. 输入邮箱(会提示登录成功)

    5. 查看当前镜像源:nrm ls

    6. 确保使用的是npm镜像源:nrm use npm

    7. 上传所有npm publish .

    8. 下载时安装router-lxc

    下载.png

相关文章

  • Node.js_后端路由(二)

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

  • Node.js_后端路由(一)

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

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

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

  • Vue路由/路由守卫

    一、前端路由和后端路由概念解释 二、路由的基本使用方式 三、常见引入路由组件的方式和区别 四、常见引入路由分类1....

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

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

  • 路由

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

  • Vue前端路由

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

  • JavaScript--路由

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

  • vue路由

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

  • Vue-路由

    路由可以分为前端路由和后端路由 后端路由: 概念:根据不同的用户url请求,返回不同的内容 本质:URL请求地址和...

网友评论

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

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