Express 中的 app.get() 方法

3,761 阅读2分钟

这是我参与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() 的第一个参数称为 pathpath 字符串支持多个特殊字符,允许您在路径字符串中使用正则表达式的子集。

例如,使用 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 非常有用。