Node.js路由浅析

什么是路由?

路由是指根据请求的URL和HTTP方法(如GET、POST等)来确定如何处理请求的过程。简单来说,路由就是将用户的请求"指引"到相应的处理函数。

Node.js中的路由

路由通常涉及以下几个方面:

  • URL 匹配:根据请求的 URL 来匹配路由规则。
  • HTTP 方法匹配:根据请求的 HTTP 方法(GET、POST、PUT、DELETE 等)来匹配路由规则。
  • 请求处理:一旦匹配到合适的路由规则,就调用相应的处理函数来处理请求

下图是官网提供的完整URL各个部分的解析

在Node.js中,我们可以使用内置的http模块来实现基本的路由功能。下面是一个简单的例子:

javascript 复制代码
const http = require('http');
const URL = require('url');

const server = http.createServer((req, res) => {
    let newUrl = new URL.URL(req.url, 'http://localhost:3000');// 使用Node.js新版的WHATWG方式把请求的路由url封装成url对象
    console.log(newUrl);
    // newUrl 对象输出,pathname就是路由
    // URL {
    //     href: 'http://localhost:3000/about',
    //     origin: 'http://localhost:3000',
    //     protocol: 'http:',
    //     username: '',
    //     password: '',
    //     host: 'localhost:3000',
    //     hostname: 'localhost',
    //     port: '3000',
    //     pathname: '/about',
    //     search: '',
    //     searchParams: URLSearchParams {},
    //     hash: ''
    //   }
    const reqUrl = req.url;
    
    const method = reqUrl.method;

    if (reqUrl === '/' && method === 'GET') {
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/plain');
        res.end('Welcome to the homepage!');
    } else if (reqUrl === '/about' && method === 'GET') {
        res.statusCode = 200;
        res.setHeader('Content-Type', 'text/plain');
        res.end('This is the about page.');
    } else {
        res.statusCode = 404;
        res.setHeader('Content-Type', 'text/plain');
        res.end('404 Not Found');
    }
});

server.listen(3000, () => {
    console.log('Server running at http://localhost:3000/');
});

访问 http://localhost:3000http://localhost:3000/about,你将分别看到如下的界面。访问其他路径(例如:http://localhost:3000/page),则会显示 "404 Not Found"。

最后

一般现在web开发都是借助第三方库来实现,比如Express,Koa等,所以大部分情况下原生路由只是做个简单了解。

相关推荐
花姐夫Jun6 分钟前
node.js基础学习-fs模块-文件操作(六)
学习·node.js·文件操作·fs
ChinaDragonDreamer6 分钟前
Node.js:开发和生产之间的区别
前端·node.js
用户67570498850217 分钟前
hyperf-throttle-requests,一个超牛的 PHP 限流神器
后端·php
余生H35 分钟前
Brain.js(二):项目集成方式详解——npm、cdn、下载、源码构建
前端·javascript·神经网络·webml·brain.js
考虑考虑39 分钟前
JDK8加载拓展包
java·后端·java ee
new出一个对象42 分钟前
uniapp-vue2引用了vue-inset-loader插件编译小程序报错
前端·javascript·vue.js
@Autowire1 小时前
请你谈谈:vue的渲染机制(render)- 3举例说明问题
前端·javascript·vue.js
waterme1onY2 小时前
由于导包而引发的错误
java·开发语言·笔记·后端
程序员清风2 小时前
RocketMQ负载均衡机制解析!
java·后端·面试
开发那点事儿~2 小时前
vue3实现el-table的拖拽
前端·javascript·vue.js