# router.METHOD
在 Express 中提供路由功能。
# 概要
router.METHOD(path, [callback, ...] callback)
# 描述
router.METHOD()
方法在 Express 中提供路由功能,其中 METHOD 是 HTTP 方法之一,例如 GET、PUT、POST 等,小写。因此,实际的方法是 router.get()
、router.post()
、router.put()
等等。
如果
router.get()
之前的路径没有调用router.head()
,则除了GET
方法之外,还会为 HTTPHEAD
方法自动调用router.get()
函数。
您可以提供多个回调,并且所有回调都被平等对待,并且表现得像中间件,除了这些回调可能会调用 next('route')
以绕过剩余的路由回调。您可以使用此机制对路由执行前置条件,然后在没有理由继续匹配路由时将控制权传递给后续路由。
以下片段说明了可能的最简单的路由定义。Express 将路径字符串转换为正则表达式,在内部用于匹配传入的请求。执行这些匹配时不考虑查询字符串,例如 "GET /" 将匹配以下路由,"GET /?name=tobi" 也是如此。
router.get('/', (req, res) => {
res.send('hello world')
})
您还可以使用正则表达式——如果您有非常具体的约束,则很有用,例如以下将匹配 "GET /commits/71dbb9c" 和 "GET /commits/71dbb9c..4c084f9"。
router.get(/^\/commits\/(\w+)(?:\.\.(\w+))?$/, (req, res) => {
const from = req.params[0]
const to = req.params[1] || 'HEAD'
res.send(`commit range ${from}..${to}`)
})
您可以使用 next
原语根据特定的程序状态在不同的中间件函数之间实现流控制。使用字符串 'router'
调用 next
将导致该路由上所有剩余的路由回调被绕过。
以下示例说明了 next('router')
的用法。
function fn (req, res, next) {
console.log('I come here')
next('router')
}
router.get('/foo', fn, (req, res, next) => {
console.log('I dont come here')
})
router.get('/foo', (req, res, next) => {
console.log('I dont come here')
})
app.get('/foo', (req, res) => {
console.log(' I come here too')
res.end('good')
})