Я пытаюсь написать собственный валидатор для экспресс-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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Похоже, вы слишком усложняете валидатор.
Во-первых, .catch() следует воспринимать аргумент как общее правило.
Здесь вы делать хотите, чтобы обещание отклонялось в случае недействительности, поэтому вам не нужно его отлавливать.
Как насчет:
query("input").custom(validateInput)
Интересно, передается ли аргумент значения валидатору?