Проверка данных перестала работать multipart / form-data - PullRequest
0 голосов
/ 16 февраля 2019

Я использую express-validator для проверки текстовых полей и multer для проверки аватаров.Но у меня есть проблема, express-validator прекратил проверку текстовых полей, если вы оставите поле пустым, экспресс-валидатор не выдаст сообщение об ошибке, что поле пустое.

Я отображал текстовые поля вотдельная переменная:

import { check, validationResult } from 'express-validator/check';

const validatorSignup = [
    check('user_name').exists().isLength({ min: 4, max: 20 }),
    ....
];

Далее я хочу при регистрации проверить, все ли поля заполнены пользователем и загружен ли аватар:

router.post('/signup', (req, res) => {
    try {
        upload(req, res, validatorSignup, (err) => {
            console.log(req.body)
            const errors = validationResult(req.body);
            if (!errors.isEmpty()) {
                return res.status(422).json({
                    err: errors.array()
                });
            }
      ....
    } catch (err) {
        return res.status(500).json({
            err: err
        });
    }
});

Но я получаю ошибку:

onFinished(req, function () { next(err) })
                                    ^
TypeError: next is not a function

Помогите решить мою проблему.

1 Ответ

0 голосов
/ 17 февраля 2019

Последовательность вызовов перепутана, здесь есть две ошибки:

  1. upload является асинхронным, и попытка перехвата не сработает.

  2. upload должен использоваться как промежуточное программное обеспечение, и вы не можете передать validatorSignup, как этот ожидающий, что multer выполнит проверку.Вот почему выдается ошибка для onFinished, потому что multer ожидает, что третий аргумент будет (next)=>{}, а не массивом.

Поэтому ваша разметка должна быть больше похожа на эту:

router.post('/signup', upload, validatorSignup, (req, res) => {
    console.log(req.body)
    const errors = validationResult(req.body);
    if (!errors.isEmpty()) {
        return res.status(422).json({
            err: errors.array()
        });
    }
    ...
});

Примечание 1: я не видел validationResult(req.body); из документации, только validationResult(req);.

Примечание 2: по умолчанию ошибки в промежуточном программном обеспечении, такие как upload и validatorSignup, автоматически приводят к 500, еслиВы хотите настроить сообщение об ошибке (например, ваш JSON с ошибкой), посмотрите Экспресс-обработка ошибок (Написание обработчиков ошибок)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...