Пользовательская функция экспресс-валидатора

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


function validateInput(value) {
    if (!(
        (check(value).isIn(utils.getNames()) ||
        check(value).isIn(utils.getIds()) ||
        check(value).isIn(utils.getHexIds()))
    )) {
        return Promise.reject("Invalid input");
    }
}

router.get('/endpoint',
    query("input").custom(async (value) => {
        await validateInput(value).catch()
    }),
    async (req, res) => {
        try {
            validationResult(req).throw();
        } catch (err) {
            res.status(400).json({"error": "A valid value for input must be passed"});
            return;
        }
   }

У меня такое чувство, что я неправильно обрабатываю обещание, но я также не могу найти правильное решение. Вот документы для пользовательского валидатора: https://express-validator.github.io/docs/custom-validators-sanitizers.html

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, вы слишком усложняете валидатор.

Во-первых, .catch() следует воспринимать аргумент как общее правило.

Здесь вы делать хотите, чтобы обещание отклонялось в случае недействительности, поэтому вам не нужно его отлавливать.

Как насчет:

query("input").custom(validateInput)

Интересно, передается ли аргумент значения валидатору?

gabbar0x 31.03.2022 14:23

Другие вопросы по теме

Интерполировать переменную внутри "каждого" цикла в Handlebars
Как лучше всего преобразовать и сохранить вложенный файл JSON в документ MongoDB?
Почему проверка Joi выдает ошибку на вложенном объекте? (потенциально связано с записью через точку в атрибуте имени)
Флаттер сокета ввода-вывода не подключается
Не могу понять, почему код пропускает операторы if в javascript
Функция onsubmit не вызывается правильно с помощью Node.js
Получил сообщение об ошибке в консоли, когда я пытаюсь обновить значение поля в mongodb через экспресс
Не удается прочитать свойства неопределенного 'res.status()', та же неопределенная ошибка для 'res.send()' и 'res.json()'. Пожалуйста, кто-нибудь
Можно ли получить базу данных MySQL с пакетом-упаковщиком в node.js? Или есть более простой способ получить базу данных MySQL с помощью пакета package-bundler?
Почему редирект с сервера nodejs работает только по первому запросу?