Express4中文文档
路由参数是命名的 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 中修复。