这是我参与11月更文挑战的第11天,活动详情查看:2021最后一次更文挑战
Express app.get()
方法允许您为给定 URL 的 GET 请求定义路由处理程序。例如,下面的代码注册了一个路由处理程序,当 Express 接收到对 HTTP GET 请求 /test
时调用该处理程序。
const app = require('express')()
// 如果您收到一个带有 url='/test' 的 GET 请求,将返回一个带有 'ok' 正文的 HTTP 响应。
app.get('/test', (req, res) => {
res.send('ok')
})
正则表达式
app.get()
的第一个参数称为 path
。path
字符串支持多个特殊字符,允许您在路径字符串中使用正则表达式的子集。
例如,使用 app.get('*')
:这将为所有 GET 请求注册一个路由处理程序。
const app = require('express')()
// 无论 URL 是什么,只要接收到 GET 请求,都会返回一个正文为 "ok" 的 HTTP 响应。
app.get('*', function routeHandler(req, res) {
res.send('ok')
})
?
、+
、*
、(
、)
和 :
是 Express 路径中的特殊字符。尽管您通常不应在 URL 中使用这些字符作为文本,但您可以使用 \
将它们转义:
const app = require('express')()
// 转义 +,因此它被视为一个文本。
app.get('/\\+', function routeHandler(req, res) {
res.send('ok')
})
我们通常不建议在 Express 路由路径中使用 *
,+
,?
,(
,或 )
。它们很少有用,特别是因为 Express 支持将 JavaScript 正则表达式指定为路径:
const app = require('express')()
// 处理 URL 以 /test/ 开头的任何 GET 请求
app.get(/^\/test\//i, (req, res) => {
res.send('ok')
})
路由参数
路由参数本质上是从 URL 的命名部分定义的变量。Express 解析 URL,提取命名部分中的值,并将其存储在 req.params
属性中。
const axios = require('axios')
const app = require('express')()
// `:userId` 是路由参数。Express 将捕获 URL 中 /user/ 后面的任何字符串,并将其存储在 req.params.userId 中
app.get('/user/:userId', (req, res) => {
console.log(req.params) // { userId: '42' }
res.json(req.params)
})
app.listen(5000)
const res = await axios.get('http://localhost:5000/user/42')
console.log(res.data) // { userId: '42' }
路由参数允许您为一类 URL 指定参数化的 GET 路由处理程序。它们对于构建 REST API 非常有用。