路由参数

中英双语

路由参数是命名的 URL 段,用于捕获在 URL 中的位置指定的值。捕获的值填充到 req.params 对象中,路径中指定的路由参数的名称作为它们各自的键。

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', (req, res) => {
  res.send(req.params)
})

路由参数的名称必须由 "word characters" ([A-Za-z0-9_]) 组成。

由于连字符 (-) 和点 (.) 是按字面解释的,因此它们可以与路由参数一起用于有用的目的。

Route path: /flights/:from-:to
Request URL: http://localhost:3000/flights/LAX-SFO
req.params: { "from": "LAX", "to": "SFO" }
Route path: /plantae/:genus.:species
Request URL: http://localhost:3000/plantae/Prunus.persica
req.params: { "genus": "Prunus", "species": "persica" }

为了更好地控制路由参数可以匹配的确切字符串,您可以在括号 (()) 中附加正则表达式:

Route path: /user/:userId(\d+)
Request URL: http://localhost:3000/user/42
req.params: {"userId": "42"}

因为正则表达式通常是文字字符串的一部分,所以一定要使用额外的反斜杠来转义任何 </code> 字符,例如 \d+

在 Express 4.x 中,正则表达式中的 * 字符不会以通常的方式解释。作为一种解决方法,请使用 {0,} 而不是 *。这可能会在 Express 5 中修复。