防止针对同一父路径执行快速中间件

时间:2018-08-27 13:42:51

标签: node.js express

这是我的密码。 我遇到了执行中间件3次的put API,但它应该只对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
});

3 个答案:

答案 0 :(得分:1)

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

代替:

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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
});