gpt4 book ai didi

javascript - Node.js 异常处理程序,如果验证错误则指定错误

转载 作者:行者123 更新时间:2023-12-03 02:03:10 24 4
gpt4 key购买 nike

我是node.js环境的新手。我曾经编写过 dotNet 代码,现在正在尝试习惯 node.js。

我在 MVC .net 中制作的项目,我使用中间件作为异常处理程序,如果发生验证错误,我会抛出 CustomException ,它有一个属性描述错误是否是验证错误。

我正在尝试在express.js 中执行此策略。我使用快速验证器

router.post("/register", validators, (req, res) => {

validationResult(req).throw();

var userDto = req.dto;
userService.registerUser(userDto)
.then(result => {
res.status(200).send("User Created Succesfully");
}).
catch(err => {
//log it,
res.status(500).send("");
})
})

如果发生错误,experss-validator 会抛出错误并显示“验证失败”消息

全局错误处理程序,例如

app.use((err,req,res,nex)=>{
if(err.message ==='Validation failed'){
console.log(err);
res.status(422).send(err.array());
}
console.log(err);

});

正如您在错误处理程序中看到的,我试图通过控制错误消息来了解错误是否是验证错误。看起来很丑,不是吗?

一般来说,我在node.js中没有见过这种方法。可能是单一责任的抽象还是其他什么?看来node.js 试图保留简单的错误内容。我因缺乏这种机制而感到痛苦。也许我正在做反模式,但我无法弄清楚。如果你有更好的方法,我会立即放弃我的:)

谢谢。

最佳答案

总的来说,是的,Node.js 世界中的错误通常很简单。与 C# 不同,您通常只会看到一种异常/错误类型: Error .

您可以自由创建自己的错误对象(使用 ES2015 classes syntax ):

class MyError extends Error {
constructor(message) {
super(message);
}
}

然后您可以像在 C# 中一样检查类型:

const myError = new MyError();
console.log(myError instanceof MyError)

但是,您通常不会看到项目/人员创建自己的错误。通常发生的情况是,他们只会使用标准 Error 对象,就像您在上面检查的特定错误消息一样。但是,您可以自由添加额外的属性(有些这样做)来帮助区分 Error 对象:

const stdError = new Error()
std.myCustomProperty = 'whoohoo'

使用 error middleware 是一个很好的做法您正在执行此操作来处理错误。

我有一个示例 MVC 风格的 Express 项目,您可以查看更好的(IMO)方法来处理错误:https://github.com/ciscoo/evaluacion

<小时/>

编辑:从 Node.js v10.0.0 开始,所有 Error 对象都将具有 code 属性。

关于javascript - Node.js 异常处理程序,如果验证错误则指定错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49927831/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com