запретить выполнение промежуточного программного обеспечения по тому же родительскому пути - PullRequest
0 голосов
/ 27 августа 2018

Это мой код, когда. Я нажимаю «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
});

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

Ответ таков: вам нужно написать экспресс-промежуточное ПО, которое является частью вашего приложения или маршрутизатора. Вы можете написать столько промежуточного программного обеспечения, сколько захотите, но в вашем случае вам нужно только один раз, и вот реализация этого.

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
});
0 голосов
/ 27 августа 2018

Ну, это происходит, потому что вы сделали это. Если вы хотите, чтобы промежуточное программное обеспечение выполнялось только при выбранном методе, вы должны указать его. Например:

Вместо того, чтобы делать:

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(); что приведет к тому же поведению.

0 голосов
/ 27 августа 2018

Промежуточное программное обеспечение в Express связано с приложением или маршрутизатором. Решение вашей проблемы - проверить метод объекта запроса на промежуточном программном обеспечении

let MiddlewareFun = function (req, res, next) {
  if (req.method === 'PUT') {
    // do something
  }
  next()
}
app.use('/api/user', MiddlewareFun);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...