描述

中英双语

路由将匹配紧随其路径的任何路径,并带有 "/"。例如:app.use('/apple', ...) 将匹配 "/apple"、"/apple/images"、"/apple/images/news" 等。

由于 path 默认为 "/",因此对于应用程序的每个请求,都会执行没有路径挂载的中间件。例如,这个中间件函数将为应用程序的每个请求执行:

app.use(function (req, res, next) {
  console.log('Time: %d', Date.now())
  next()
})

注意

子应用程序将:

  • 不继承具有默认值的设置值。您必须在子应用程序中设置该值。
  • 继承设置的值,没有默认值。

详见 应用程序设置

中间件功能是按顺序执行的,因此中间件包含的顺序很重要。

// this middleware will not allow the request to go beyond it
app.use(function (req, res, next) {
  res.send('Hello World')
})

// requests will never reach this route
app.get('/', function (req, res) {
  res.send('Welcome')
})

错误处理中间件

错误处理中间件总是需要四个参数。您必须提供四个参数以将其标识为错误处理中间件函数。即使您不需要使用 next 对象,您也必须指定它来维护签名。否则,next 对象将被解释为常规中间件,无法处理错误。有关错误处理中间件的详细信息,请参见:错误处理.

以与其他中间件函数相同的方式定义错误处理中间件函数,除了使用四个参数而不是三个参数,特别是使用签名 (err, req, res, next)):

app.use(function (err, req, res, next) {
  console.error(err.stack)
  res.status(500).send('Something broke!')
})