首页 > 解决方案 > 防止 express 中间件为相同的父路径执行

问题描述

这是我的代码。我正在点击 put API,它正在执行中间件 3 次,但它应该只为 put API 执行。

app.use('/api/user', MiddlewareFun);
  app.get('/api/user', (req, res) => {
     //do something
});

app.use('/api/user', MiddlewareFun);
app.post('/api/user', (req, res) => {
    //do something
});

app.use('/api/user', MiddlewareFun);
app.put('/api/user', (req, res) => {
    //do something
});

请不要说这样使用。

app.put('/api/user', MiddlewareFun, (req, res) => {
   //do something
});

标签: node.jsexpress

解决方案


嗯,它正在发生,因为你已经做到了。如果您希望中间件仅以选定的方法执行,则必须指定它。例如:

而不是这样做:

app.use('/api/user', MiddlewareFun)
app.put('/api/user', (req, res) => {
     //do something
})

use方法替换为put. 正如您绑定常规路线一样:

app.put('/api/user', MiddlewareFun)
app.put('/api/user', (req, res) => {
     //do something
})

另外,还有一件事。您不必在每个路由声明之前复制中间件调用。如果您想将中间件应用于整个路由器,您可以使用.use()(就像您所做的那样),或者.all(); 这将导致相同的行为。


推荐阅读