Экспресс валидатор не работает с почтовым значением? - PullRequest
0 голосов
/ 24 октября 2019

Это мой текущий код, он работает нормально, но мне нужно получить доступ к req.body.type в createValidationFor, если я пытаюсь получить доступ к коду, проверка req.body перестает работать, я не знаю, почему

   router.post(
        '/login',
        createValidationFor('email'),
        checkValidationResult,
        (req, res, next) => {
            res.json({ allGood: true });
        } );

function createValidationFor(type) {

    switch (type) {
        case 'email':
            return [
                check('email').isEmail().withMessage('must be an email')
            ];

        case 'password':
            return [
                check('password').isLength({ min: 5 })
            ];
        default:
            return [];
    } }

function checkValidationResult(req, res, next) {
    const result = validationResult(req);
    if (result.isEmpty()) {
        return next();
    }

    res.status(422).json({ errors: result.array() }); }

Модифицированный код: - Я пытаюсь получить доступ к req внутри функции createValidationFor, но после этого проверка перестает работать

router.post(
    '/login',
    createValidationFor,
    checkValidationResult,
    (req, res, next) => {
        res.json({ allGood: true });
    }
);

function createValidationFor(req, res) {
    var type = req.body.type;
    switch (type) {
        case 'email':
            return [
                check('email').isEmail().withMessage('must be an email')
            ];

        case 'password':
            return [
                check('password').isLength({ min: 5 })
            ];
        default:
            return [];
    }
}

function checkValidationResult(req, res, next) {
    const result = validationResult(req);
    if (result.isEmpty()) {
        return next();
    }

    res.status(422).json({ errors: result.array() });
}

1 Ответ

0 голосов
/ 31 октября 2019

Ваша функция createValidationFor не должна получать req, res, next параметров, поскольку она не является промежуточным программным обеспечением, она просто вставляет (возвращает) соответствующую цепочку проверки в соответствии со значением type в качестве единственного необходимого параметра (в вашем примере type = 'email'). Только функция checkValidationResult отвечает за все промежуточное программное обеспечение: отправка ошибки, если существуют ошибки проверки, или передача управления с помощью next().

function createValidationFor (type) {
    switch (type) {
        case 'email':
            return [
                check('email').isEmail().withMessage('must be an email')
            ];
        case 'password':
            return [
                check('password').isLength({ min: 5 })
            ];
        default: 
            return [];
    };
};

function checkValidationResult(req, res, next) {
    const result = validationResult(req);
    if (result.isEmpty()) {
        return next();
    };
    res.status(422).json({ errors: result.array() });
};

router.post(
    '/login',
    createValidationFor('email'),
    checkValidationResult,
    (req, res, next) => {
        res.json({ allGood: true });
    }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...