0

示例代码:

app.use('/list-product', (req, res, next) => {
  // Do stuff
  next();
})

app.use('/add-product', (req, res, next) => {
  console.log("I'm here")
})

不知何故,它没有记录“我在这里”,这意味着next()呼叫不起作用。

但是,如果我更改'/add-product''/'或完全删除它,它会起作用。这是为什么?

如上例所示,如何跳转到具有初始 url 的下一个中间件?

4

1 回答 1

1

听起来您不太明白,当您将路径放在中间件前面时,URL 必须至少部分匹配该路径才能调用该中间件。

因此,当您请求 ./list-product时,它将匹配您的/list-product中间件,然后调用next(). 这将在中间件链上继续寻找与/list-product路径匹配的其他中间件处理程序。当它到达你的下一个中间件时/add-product,它不匹配/list-product,所以它被跳过(不被调用)。

如果您更改app.use('/add-product', ...)app.use('/', ...)或更改为app.use(...)没有路径,那么最后两个是匹配的,/list-product因此它们将被调用。/中间件是部分匹配的(对于所有 URL),并且将为所有 URL 调用没有路径的中间件 。app.use()运行部分匹配。更具体的请求处理程序喜欢app.get()app.post()需要更完整的匹配。

于 2019-08-18T03:53:07.253 回答