• 路由


    路由(Routing)是由一个URI(或者叫路径)和一个特定的HTTP 方法(GET、POST 等)组成的,涉及到应用如何响应客户端对某个网站节点的访问。
    路由指的就是针对不同请求的URL,处理不同的业务逻辑。

    route.js

    const http = require('http');
    const url = require('url')
    const staticWeb = require('./web')
    
    http.createServer(function (request, response) {
        //创建静态Web服务
        staticWeb(request,response,'./static')
        //路由
        let pathname = url.parse(request.url).pathname
        if (pathname == '/') {
            response.writeHead(200, { 'Content-Type': 'text/html;charset="utf-8"' });
            response.end("<h3>执行首页逻辑</h3>");
        }
        else if(pathname=='/login'){
            response.writeHead(200, { 'Content-Type': 'text/html;charset="utf-8"' });
            response.end("<h3>执行登录逻辑</h3>");
        }
        else if(pathname=='/register'){
            response.writeHead(200, { 'Content-Type': 'text/html;charset="utf-8"' });
            response.end("<h3>执行注册逻辑</h3>");
        }
        else if(pathname=='/loginOut'){
            response.writeHead(200, { 'Content-Type': 'text/html;charset="utf-8"' });
            response.end("<h3>执行退出登录逻辑</h3>");
        }
        else{
            response.writeHead(404, { 'Content-Type': 'text/html;charset="utf-8"' });
            response.end("<h3>404 Not Found</h3>");
        }
    }).listen(8081);
    
    console.log('Server running at http://127.0.0.1:8081/');

     

     

     而直接访问静态资源文件会出现404,

    这是因为,静态文件的读取是异步的,还没有读取完成,先去匹配后端路由了,所以可以阻塞静态服务的读取,静态文件读取后再去匹配后端路由

    web.js

    const fs = require('fs')
    const path = require('path')
    const url = require('url')
    
    let getMime = function (ext) {
        let data = fs.readFileSync('./mime.json'); //同步方法,没有回调
        let mime = JSON.parse(data.toString())[ext]
        return mime;
    }
    
    module.exports = function staticWeb(req,res,staticPath){
        let pathname = url.parse(req.url).pathname  //先获取地址
        pathname = pathname == '/' ? '/index.html' : pathname //根目录下定位到首页
        let ext = path.extname(pathname) //获取文件后缀名
        if (pathname != '/favicon.ico') {//过滤favicon的请求再读取
            try {
                let data = fs.readFileSync(staticPath + pathname)
                console.log(staticPath + pathname)
                if (data) {
                    let mime = getMime(ext) //获取文件类型
                    res.writeHead(200, { 'Content-Type': `${mime};charset="utf-8"` });
                    res.end(data);
                }
            } catch (error) {
                console.log(error)
            }
        }
    }
    

     这里一定需要 try ... catch ,否则会不成功???

    然后可以正常访问静态文件资源,不会报 404了:

  • 相关阅读:
    学以致用十九-----shell脚本之引号
    学以致用十八-----shell脚本之基础概念及变量
    学以致用十七-----shell脚本之比较数字和字符串及if else
    学以致用十六-----Centos7.2编译安装mysql5.6.22
    学以致用十五-----前端里注意事项一
    学以致用十四-----打造一个简单的vim IDE
    学以致用十三-----Centos7.2+python3+YouCompleteMe成功历程
    json、javaBean、xml互转的几种工具介绍
    android课程第一节(TextView控件使用)
    Android Please ensure that adb is correctly located at问题解决
  • 原文地址:https://www.cnblogs.com/shanlu0000/p/13152921.html
Copyright © 2020-2023  润新知