node.js中是否可以 new Error(code, message);
发布于 7 年前 作者 maxxfire 8342 次浏览 来自 问答

经常看到的用法是: new Error(‘the message’); 但是有的时候,我需要自定义错误码,那么是否可以直接: new Error(code, message);

这样在回调callback的时候,可以直接传递,如: async.series([function(callback){
callback(null, 1);
}, function(callback){
callback(new Error(code, message), 2); }],function(error, results){
if(error){
console.error("error happend: " + error.code + error.message );
}
});

22 回复

你可以自己定义一种错误类型;比如

export expError extends Error { constructor(code, message) { xxxxxx } }

callback({msg: err, code: code})即可,callback第一个参数默认为err,只要第一个不为null,就认为返回了错误

不错,LS这2种方法感觉都不错

@nnliang 这种 object 方式不适合报错场景,只适合返回用户错误类,因为没有 error 堆栈了。

node里如果你要实现,要么1楼的方法,也是比较好的一种,要么这样

const err = {msg: ‘some msg’, code: yourErrCode} Error.captureStackTrace(err)

@nnliang 你这种写法,在我这边会被打死的

@mosaic101 那你们那边是怎么写的,没进过大厂,都是自己瞎琢磨的,请教一下啦

image.png我是这样的,用的是async.waterfall

我这样其实也不好res.send有点多了,但公司老哥们也都这样写的

我是 promise.reject({code:, message:}) 用 catch 捕捉 再 send。 还有一种 const err = new Error(’’) err.code = -1 err.message=balabala

楼主的想法原生默认是不支持的,可以考虑进一步对Error扩展,然后自己维护new Error(code, message)中code的含义映射 但一定要保留Error的特性,方便外层检测类型、跟踪出错堆栈、异常冒泡等~。

@atian25 那你们那边是怎么写的,没进过大厂,都是自己瞎琢磨的,请教一下啦

我们没啥 callback,都是直接 throw

@nnliang 参考12楼的做法,可以封装个工厂方法统一维护 (code、message), error code 与 http code 结合,api 调用方也能快速定位 error 根据 code 含义结合业务给出明确的 toast ~

@mosaic101 0.0,如同egg里面的this.ctx.throw(404, 'user not found');这样吗,如果和客户端交流,服务端这么定义错误码不会引起歧义吗?

可能这就是野场和大厂的区别吧,对于这些基础但是又常用的却不知道该怎么处理😭

谢谢大牛们提供的思路 image.png

项目中基本上都是用1L的方法,自定义错误类

@nnliang 我这边也算野厂的,首先你需要区分http code 与 error code,一个是网络状态码,一个是自定义错误码! 针对rest api而言,http code其实是够的, 但是大部分 client 端需要针对不同情况提示不同信息,如果仅仅依赖 response 返回的 message 是不可靠的!在我的认知里, 提示信息就该 client 自己根据情况返回给用户,而不是 api 给什么 message 就返回什么,这个属于边界划分问题,message 我是归为 client 端! 这个时候 response 里的 error code 就是后台针对资源定义的服务级别的错误, client 可以根据 error code 对应 error 表格明确自己需要显示什么信息,具体的你可以参考微信、淘宝、新浪 sdk 设计,微信的 http code 都是 200,而我提倡 http code 与 error code 结合,这个就个人你资源边界划分的定义了! 在地铁上没办法贴demo,如果有更好的意见请@我

来自酷炫的 CNodeMD

@mosaic101 好吧,其实我个人也比较喜欢http code 都是200,所以错误返回这里和你的想法不太一样

@nnliang 针对 rest api 而言,request method 都有对应的 http code ,这都是有意义的!

@cd-xulei 全局统一维护并且挂在 gobal 上, 外加一份 error code 对应的错误信息表格! 这种方式是我目前觉得最好的方式

回到顶部