Как условно назвать промежуточное программное обеспечение уровня маршрутизатора?

#node.js #express #express-router

Вопрос:

У меня есть две функции для проверки тела запроса, validation1 и validation2 . Теперь моя задача состоит в том, чтобы после анализа тела входящего запроса мне нужно проверить данные с validation1 помощью роли пользователя premium user , в противном случае я проверю данные с помощью validation2 .

Я пытался решить эту проблему следующим образом, но безрезультатно. По какой-то причине промежуточные программы проверки не вызываются.

 const express = require('express'); const router = express.Router();   const { userController } = require('./controllers');  router.route('/check').post(  (req, res, next) =gt; {  if (req.role === 'premium user') {  validation1(someInformation);  } else {  validation2(someInformation);  }  next();  },  userController.check );   const validation1 = (someInformation) =gt; (req, res, next) =gt; {  // codes  return next(); }  const validation2 = (someInformation) =gt; (req, res, next) =gt; {  // codes  return next(); }  

Любая помощь будет признательна. Заранее спасибо.

Комментарии:

1. Попробуйте удалить next() в своем router.route('/check').post(

Ответ №1:

Вы должны передать функцию обратного next вызова для проверки функции.

Также измените функцию проверки, как показано ниже кода:

 const express = require('express'); const router = express.Router();   const { userController } = require('./controllers');  router.route('/check').post(  (req, res, next) =gt; {  if (req.role === 'premium user') {  validation1(req, res, next);  } else {  validation2(req, res, next);  }  },  userController.check );   const validation1 = (req, res, next) =gt; {  // codes  return next(); }  const validation2 = (req, res, next) =gt; {  // codes  return next(); }  

Комментарии:

1. Я немного отредактировал свой код. Не могли бы вы еще раз проверить мой код?

2. validation1 и validation2 являются вашими функциями, вы можете передавать любое количество аргументов. Если вам нужно передать еще несколько аргументов, вы можете передать их во время вызова like validation1(someInformation, req, res, next); и принять, когда вы определяете like const validation1 = (someInformation, req, res, next) =gt; {

3. Зачем создавать подобную функцию const validation1 = (someInformation) =gt; (req, res, next) =gt; ? Если создать подобную функцию, у вас будет два вызова функции дважды validation1(someInformation)(req, res, next)