выполнить проверочное промежуточное ПО после проверочных проверок - PullRequest
1 голос
/ 16 марта 2019

Я хочу создать Express REST API и хочу проверить параметры запроса и тело запроса.Если все в порядке, я хочу вызвать логику контроллера.

Мое промежуточное ПО проверки -

const { validationResult } = require('express-validator/check');

module.exports = (req, res, next) => {
    const validationErrors = req.validationResult();

    if (!validationErrors.isEmpty()) {
        // send a 400
    }

    next();
}

, и я использую его в своих маршрутах перед вызовом контроллера.Это фрагмент моего themes.js файла маршрута

const validation = require('../middleware/validation.js');
const { check } = require('express-validator/check');

router.get('/', topicsController.getAllTopics);

router.get('/:topicId', [
    check('topicId').isUUID()
], validation, topicsController.getTopicById);

router.post('/', authenticationCheck, authorizationCheck, [
    check('parentTopicId').isUUID() || check('parentTopicId').isNull(), // check if it's a UUID. If not, check if it's null
    !check('name').isEmpty(), // is it not empty?
], validation, topicsController.createTopic);

router.put('/:topicId', authenticationCheck, authorizationCheck, [
    check('topicId').isUUID(),
    check('parentTopicId').isUUID() || check('parentTopicId').isNull(),
    !check('name').isEmpty(),
], validation, topicsController.updateTopic);

router.delete('/:topicId', authenticationCheck, authorizationCheck, [
    check('topicId').isUUID()
], validation, topicsController.deleteTopic);

Я попытался войти в него с помощью документа

https://express -validator.github.io/docs/#basic-guide

но при запуске API я получаю эту ошибку

Ошибка: Route.post () требует функцию обратного вызова, но получилa [объект Boolean]

Так что, кажется, я не могу сначала передать массив, затем промежуточное ПО проверки, а затем контроллер.

Есть ли способ исправитьфайл маршрута?Я не хочу обрабатывать логику проверки в моем файле контроллера.Я думаю, что это должно быть сделано раньше.

1 Ответ

1 голос
/ 16 марта 2019

Вам нужно использовать oneOf для проверки условных параметров.

В ваших маршрутах вы используете check('parentTopicId').isUUID() || check('parentTopicId').isNull(), но это возвращает логическое значение, а для экспресса требуется промежуточное программное обеспечение. oneOf был построен специально для этого.

Также вы должны заменить !check на check('name').not().isEmpty().

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