[node] Node.js的路由

node Node.js的路由

  • 路由 & 路由解析
  • 路由信息的整合
    • URL信息
    • 路由处理逻辑
    • 路由逻辑与URL信息的整合
    • 路由的使用

路由 & 路由解析

路由需要提供请求的 URL 和其他需要的 GET/POST 参数,随后路由需要根据这些数据来执行相应的代码。

因此,根据 HTTP 请求,从中提取出请求的 URL 以及 GET/POST 参数。这一功能应当属于路由还是服务器(亦或一个单独模块的功能)确实值得探讨,但这里暂定其为HTTP服务器的功能。

目前所有数据都会包含在 request 对象中,该对象作为 onRequest() 回调函数的第一个参数传递。但是为了解析这些数据,我们需要额外的 Node.JS 模块,它们分别是 url 和 querystring 模块。

ts 复制代码
var url = require("url");
var querystring = require("querystring");

var data = "http://localhost:8888/start?foo=bar&hello=world";

const query = url.parse(data).query;
console.log(query); // foo=bar&hello=world
console.log(url.parse(data).pathname); // /start
console.log(querystring.parse(query)["foo"]); // bar
console.log(querystring.parse(query)["hello"]); // world

路由信息的整合

URL信息

server.js ,用于获取浏览器URL地址,该信息是路由需要使用到的信息:

ts 复制代码
var http = require("http");
var url = require("url");
 
function start() {
  function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }
 
  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}
 
exports.start = start;

以上代码达成通过 URL 路径来区别不同请求--使得路由之后(还未完成)可以将请求(以 URL 路径为基准)映射到处理程序上。

路由处理逻辑

router.js 简单的路由处理逻辑模块:

ts 复制代码
function route(pathname) {
  console.log("About to route a request for " + pathname);
}
exports.route = route;

以上代码没有具体的逻辑处理,你之后可以根据需要添加,此时只是封装了路由的处理方法。

路由逻辑与URL信息的整合

然后,先来看看如何把路由和服务器整合起来。

服务器知道路由的存在并应加以有效利用。可以通过硬编码的方式将这一逻辑处理绑定到服务器上,但是对于推荐模块开发的情况下,使用依赖注入的方式较松散地添加路由模块会使得耦合性更低,也方便以后的代码变更。

所以对于server.js 文件做出如下更改,将路由函数作为参数传递过去:

ts 复制代码
var http = require("http");
var url = require("url");
 
function start() {
  function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");

    route(pathname);

    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }
 
  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}
 
exports.start = start;

路由的使用

index.js 文件,服务器使用路由的方式--路由函数注入到服务器中:

ts 复制代码
var server = require("./server");
var router = require("./router");
 
server.start(router.route);

以上整体是对路由信息的获取与如何添加路由处理逻辑的一个简单介绍,是一种方法上的介绍

相关推荐
Hone7 小时前
我把「自动发文章到掘金」做成了一个 Agent 技能:juejin-skills
node.js·ai编程·前端工程化
Dumbness12 小时前
二十行手写的 SKILL.md 头部解析,遇到 YAML 的折叠写法、单引号和嵌套键就读错:和 js-yaml 逐条对照
node.js·ai编程
只睡四小时1 天前
MCP 弃用 SSE?Node 分帧漏 81.7% 事件
node.js·webassembly·实时通信·mcp·streamable http
hey you~1 天前
个体户门店办理400电话,如何对接订单系统实现来电弹窗
node.js·webhook·400电话·门店数字化·来电弹窗·订单系统对接
YIAN3 天前
RAG 学到最后,我真正学会的不是“检索”,而是让系统知道自己缺什么
langchain·node.js·llm
用户11977079480733 天前
GitHub 电商开源项目分享:用 sharp 批量出饰品主图,试了裁剪、细节图和色彩配置文件三个坑
前端·node.js
donecoding3 天前
pnpm 配好了,为什么执行的还是另一份?命令入口与运行时排查
node.js·前端工程化
江屿风3 天前
【Plain Language Large Model】【从浏览器到全栈:一课精通Node.js三剑客】流食般投喂
笔记·前端框架·npm·node.js·js·npx
SomeOtherTime3 天前
node.js基础(AI回答)
node.js
雨季mo浅忆3 天前
记录Node.js安全漏洞及其内置Brotli解码器问题
node.js·安全性测试