【Express】路由
2021/09/09 09:59:54
示例:
var express = require("express");
var app = express();
app.get("/", function(req, res) {
res.send("hello world");
});
方法
express
支持所有 HTTP 请求类型
app.get()
作用: 指定 get 方法的路径和对应的回调
示例: app.get('/',(req,res) => {})
app.post()
app.all()
作用: 为所有类型的请求绑定路由
示例: app.all('/',(req,res) => {})
app.route()
作用: 给一个路径设置不同的请求类型处理函数
示例:
app
.route("/book")
.get(function(req, res) {
res.send("Get a random book");
})
.post(function(req, res) {
res.send("Add a book");
})
.put(function(req, res) {
res.send("Update the book");
});
路由路径
路由路径可以是字符串, 字符串模式, 正则表达式, 如果路径中包含 $
, 需要在设置路由时对 $
进行转义 ([\$])
字符?, +, *, 和()是正则表达式的对应子集
连字符 -
和点 .
是按照字面意思解释的
查询字符串不属于路由路径的匹配范围
精确匹配
路径直接写为固定路径或字符串时只会在路径完全一致时匹配
// 输入 /about 时匹配
app.get("/about", function(req, res) {
res.send("about");
});
// 输入 /random.text 时匹配
app.get("/random.text", function(req, res) {
res.send("random.text");
});
字符串模式
一下列出基于字符串模式的路由路径及可匹配路径
/ab?cd
,?
表示前一个字符可有可无, 可匹配的有:acd
,abcd
/ab+cd
,+
表示前一个字符可以重复多次, 可匹配的有:abcd
,abbcd
,abbbbcd
/ab*cd
,*
通配符, 表示这个位置可以有任意其他字符, 可匹配的有:abxcd
,abRANDOMcd
,ab123cd
正则
/a/
, 匹配带有a
的路径/.*fly$/
, 匹配butterfly
和dragonfly
, 但不butterflyman
,dragonflyman
等。
路径参数
Route path: /users/:userId/books/:bookId
Request URL: http://localhost:3000/users/34/books/8989
req.params: { "userId": "34", "bookId": "8989" }
app.get("/users/:userId/books/:bookId", function(req, res) {
res.send(req.params);
});
使用正则进行更精确的控制
Route path: /user/:userId(\d+)
Request URL: http://localhost:3000/user/42
req.params: {"userId": "42"}
路由处理函数
可以使用类似中间件的多个回调函数来处理请求, 利用 next()
方法来跳转到下一个路由处理函数
多个回调函数
app.get(
"/example/b",
function(req, res, next) {
console.log("the response will be sent by the next function ...");
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/c", [cb0, cb1], (req, res, next) => {
next();
});
响应方法
调用一下方法会向客户端发送响应, 并终止请求-响应周期, 如果没有调用这些方法
- res.download() 提示要下载的文件
- res.end() 结束响应过程
- res.json() 发送 JSON 响应
- res.jsonp() 发送带有 JSONP 支持的 JSON 响应
- res.redirect() 重定向请求
- res.render() 渲染视图模板
- res.send() 发送各种类型的响应
- res.sendFile() 将文件作为八位字节流发送
- res.sendStatus() 设置响应状态代码,并将其字符串表示形式发送为响应正文