Node.js 防止对同一父路径执行express中间件

Node.js 防止对同一父路径执行express中间件,node.js,express,Node.js,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 }

这是我的代码。 我正在点击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
});

Express中的中间件绑定到应用程序或路由器。 yuur问题的解决方案是在中间件上检查请求对象的方法

let MiddlewareFun = function (req, res, next) {
  if (req.method === 'PUT') {
    // do something
  }
  next()
}
app.use('/api/user', MiddlewareFun);

答案是,您需要编写express中间件,它是应用程序或路由器的一部分。您可以编写任意数量的中间件,但在您的情况下,您只需要编写一次,下面是它的实现

const MiddlewareFun = function(req, res, next) {
  // req is object which consist of information about request made.
  // From req object you can get method name which is called.

  if(req.method.toLowerString() === 'put') {
     // your logic goes here
  }

  next();
}

app.use('/api/user', MiddlewareFun);

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

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


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

好吧,它正在发生,因为你已经成功了。如果希望中间件仅在选定的方法上执行,则必须指定它。例如:

而不是做:

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()
;这将导致相同的行为。

3次app.use。为什么?