NodeJS,Joi验证-验证失败后中止执行

时间:2018-09-24 19:18:42

标签: node.js error-handling header send joi

我有以下代码:

const schema = Joi.object().keys({
            zip: Joi.number().min(1).max(9999999).required().label("Just an example error code, avoid the zip code validation method (0-9999999)."),
        });

        Joi.validate({ zip: req.body.zip }, schema, function (err, value) {
            if (!(err === null)){
                res.status(400).send(err['details']['0']['context']['label']);
            }
        });

即使我成功调用错误消息并将其发送回HTTP标头(错误400),执行也不会停止并且将继续运行。 我认为发生这种情况是因为它已经跳过了执行的其他部分,甚至没有到达返回标头错误消息的那一部分。

如何避免呢?我唯一避免这种情况的方法是将Joi依赖项与回调/ promises / async,await一起使用吗?

如果否,如何以最佳方式实现Promise的Joi依赖项?

谢谢。

1 个答案:

答案 0 :(得分:0)

发现了问题:
在使用以下方式发送回复时:
res.status(400).send(err['details']['0']['context']['label']);

我意识到我并没有使用return语句来使其变为“ final”。添加它可以解决该问题,如下所示:

return res.status(400).send(err['details']['0']['context']['label']);