#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
являются вашими функциями, вы можете передавать любое количество аргументов. Если вам нужно передать еще несколько аргументов, вы можете передать их во время вызова likevalidation1(someInformation, req, res, next);
и принять, когда вы определяете likeconst validation1 = (someInformation, req, res, next) =gt; {
3. Зачем создавать подобную функцию
const validation1 = (someInformation) =gt; (req, res, next) =gt;
? Если создать подобную функцию, у вас будет два вызова функции дваждыvalidation1(someInformation)(req, res, next)