2022-02-25 Node.js Express框架学习笔记(二) Express路由的定义,路径和句柄

本文详细介绍了Node.js中Express框架的路由定义,包括路由的结构、字符串路径、字符串模式和正则表达式的使用,以及各种形式的路由句柄,如回调函数、函数数组和它们的混合使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.路由的定义

路由是指如何定义的端点,以及如何响应客户端的请求

路由决定了由谁(指定脚本)去响应客户端请求。
在HTTP请求中,我们可以通过路由,提取出请求的URL以及GET/POST参数。
2.路由例子
	const express = require('express');//引入express
	const app = express();//实例化express对象
	//这是一个挂载到app上的路由
	app.get("/",(req,res)=>{
		res.send("hello world");
	});
3.路由的结构

路由是由一个 URI、HTTP 请求(GET、POST等)和若干个句柄(handle)组成,
它的结构如下: app.METHOD(path, [callback…], callback),
其中,

 app 是 express 对象的一个实例,
 METHOD 是一个 HTTP 请求方法, 
 path 是服务器上的路径,
 callback 是当路由匹配时要执行的函数。
4.路由的路径

路由路径请求方法一起定义了请求的端点,
可以是字符串,字符串模式或者正则表达式

4.1.字符串
app.get("/login", function(req, res) { 
  res.send(`<html><h1>hello world</h1></html>`);
});
4.2.字符串模式

使用字符串模式的路由路径:

app.get("/ab?cd", function(req, res) { //表示字符b是可选的,也就是可以匹配到acd和abcd
  res.send(`<html><h1>hello world</h1></html>`);
});

结果:
http://127.0.0.1:8081/abcdhttp://127.0.0.1:8081/abcd都可以正常显示hello world
同理,还有

//1.问号:问号之前那个字符是可选的
app.get('/ab?cd', function(req, res) {}// 匹配 acd 和 abcd
//2.冒号:只要冒号之前的内容满足就行,冒号之后匹配任意内容
app.get('/ab/:id', function(req, res) {}// 匹配 /ab/******
//3.加号:加号之前的那个字符可以一次或多次出现
app.get('/ab+cd', function(req, res) {}// 匹配 abcd、abbcd、abbbcd等
//4.星号:星号可以是任意内容,也就是星号两边的字符之间,可以填充任意字符
app.get('/ab*cd', function(req, res) {}// 匹配 abcd、abxcd、abRABDOMcd、ab123cd
//5.括号:把括号中的字符看成一个整体
app.get('/ab(cd)+e', function(req, res) {}// 匹配 /abcde、/abcdcdcdcded等
4.3.正则表达式
// 匹配任何路径中含有 a 的路径:
app.get(/a/, function(req, res) {
  res.send('/a/');
});

// 匹配 butterfly、dragonfly,不匹配 butterflyman、dragonfly man等
app.get(/.*fly$/, function(req, res) {
  res.send('/.*fly$/');
});
5.路由句柄
路由的回调函数与中间件
类似:
可以为请求处理提供多个回调函数,其行为类似中间件。
区别:
这些回调函数有可能调用 next('route') 方法而略过其他路由回调函数。

利用该机制作为路由定义的前提条件:

如果在现有路径上继续执行没有意义,则可将控制权交给剩下的路径。
路由句柄的形式

有多种形式,可以是一个函数、一个函数数组,或者是两者混合

  • 使用一个回调函数处理路由:
app.get('/example/a', function (req, res) {
  res.send('Hello from A!');
});
  • 使用多个回调函数处理路由(记得指定 next 对象):
app.get('/example/b', function (req, res, next) {
  console.log('response will be sent by the next function ...');
  next();//指定next对象
}, function (req, res) {//第二个回调函数
  res.send('Hello from B!');
});
  • 使用回调函数数组处理路由:
var cb0 = function (req, res, next) {
  console.log('CB0');
  next();
}
 
var cb1 = function (req, res, next) {
  console.log('CB1');
  next();
}
 
var cb2 = function (req, res) {
  res.send('Hello from C!');
}
 
app.get('/example/c', [cb0, cb1, cb2]);//是多个回调函数的方式的改进,显得规整
  • 混合使用函数和函数数组处理路由:
var cb0 = function (req, res, next) {
  console.log('CB0');
  next();
}
 
var cb1 = function (req, res, next) {
  console.log('CB1');
  next();
}
// 就是上述两个方法一起用
app.get('/example/d', [cb0, cb1], function (req, res, next) {
  console.log('response will be sent by the next function ...');
  next();
}, function (req, res) {
  res.send('Hello from D!');
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端OnTheRun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值