一、Express路由
路由是指确定应用程序如何响应客户端对特定端点的请求,该特定端点是URI(或路径)和特定的HTTP请求方法。它包含一个请求方法、路径、和回调函数
app.methods(path, callback)
二、Express路由方法
Express
方法来源于 HTTP
方法之一,附加在express
类的实例,
有:get
、post
、put
、delete
等
app.get('/', function (req, res) {
res.send('Hello World!')
})
app.post('/', function (req, res) {
res.send('Got a POST request')
})
app.put('/user', function (req, res) {
res.send('Got a PUT request at /user')
})
app.delete('/user', function (req, res) {
res.send('Got a DELETE request at /user')
})
三、路径
Express
路径包括三种表达形式,分别为
字符串、字符串模式、正则表达式
3.1、字符串路径
- 此地址将与
/login
匹配
app.get('/login', function(req, res, next) {
res.render('login', { title: '登录' });
});
3.2、字符串模式路径
类字符串的正则模式,使用的是正则的规则
- 此路由将会匹配
/abcd
或/acd
//? 问号代表前面的字符最多只可以出现一次(0次、或1次)。
// 所以是 /acd 或 abcd
app.get('/ab?cd', (req,res) => {
res.send("类字符串的正则模式")
})
- 此路由将会匹配
/abcd
或/abbcd
或/abbbcd
//+ 号代表前面的字符必须至少出现一次(1次或多次)
// 所以是 /abcd 或 /abbcd 或 abbbcd
app.get('/ab+cd', (req,res) => {
res.send("类字符串的正则模式")
})
- 此路由将会匹配
/abcd
或/ab123cd
//* 号代表,必须以前面字符开头,后面字符结尾,中间任意
// 所以是 /abcd 或 /ab123cd
app.get('/ab*cd', (req,res) => {
res.send("类字符串的正则模式")
})
3.3、正则表达式路径
- 此路由将会匹配 其中带有
a
的任意内容
app.get(/a/, (req,res) => {
res.send("正则表达式路径")
})
- 此路由将会匹配 以
a
开头,后面数字最少10位的路径 http://127.0.0.1:8080/a1234567890
app.get(/\/a\d{10,}/, (req, res) => {
res.send("新闻页面")
})
四、动态路由
4.1、介绍
路由参数命名为 URL 段,用于捕获 URL 在其位置处指定的值。捕获的值填充到 req.params
中,并将路径中指定的 route 参数作为其各自的键
如:
Route path: /users/:userId/books/:bookId
Request URL: http://localhost:3000/users/34/books/8989
req.params: { "userId": "34", "bookId": "8989" }
4.2、使用
只需在路由路径中指定路由参数:
app.get('/users/:userId/books/:bookId', (req, res) => {
res.send(req.params)
})
五、路线处理程序
同一个路由,可以有多个回调函数,层层处理,需要有一个 next
app.get('/users/:userId/books/:bookId', (req, res, next) => {
console.log(req.params)
next() // 执行下一个回调函数
}, (req, res) => {
res.send(req.params)
})
六、res
响应对象的方法
res
响应对象上的方法可以响应发送到客户端,并终止请求-响应周期
方法 | 描述 |
res.download() | 提示要下载的文件 |
res.end() | 结束响应过程 |
res.json() | 发送JSON响应 |
res.jsonp() | 发送带有JSONP支持的JSON响应 |
res.redirect() | 重定向请求 |
res.render() | 渲染视图模板 |
res.send() | 发送各种类型的响应 |
res.sendFile() | 将文件作为八位字节发送 |
res.sendStatus() | 设置响应状态码,并将其字符串表示形式发送为响应正文 |