# 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 方法之外,还会为 HTTP HEAD 方法自动调用 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')
})
Last Updated: 6/17/2023, 6:57:19 PM