大家好。我是新手请大家多多赐教, 我现在有一堆错误编号(error code)和相对应的中文解释。大概就是
{
errorCode:A10,
description: "输入校验错误"
}
服务层可能会抛出上面那样的自定义异常。我在 controller 层 try-catch 服务层抛出的自定义异常,然后返回上面那样的回应给前端。问题是当中并不完全是由我自己抛出的异常,还有涉及是操作数据库之类的 sequelize 异常,或一些其他库自定义的异常。所以我不可以把那个异常直接返回前端,那应该怎么办,是不是在不同的层不断地 try-catch 转换成既定格式。但如果我逐个捕获的话,可能需要大量的 try-catch 代码.而且我不太清楚如何储存上述的异常编号与其中文解释。谢谢大家。
1
MinQ 2020-12-07 17:10:43 +08:00
业务异常定义成 ServiceException,然后在最外面统一处理。异常编号与中文解释存一个 redis,用到的时候去查一下
|
2
saulshao 2020-12-07 17:23:38 +08:00
你如果是前端,那就自己定义一套异常,这些异常通常只作用于前端代码,所有不需要与后端交互的异常都应该在你的这一套异常里头。
但是通常这不是你自己说了算的,你需要把这套东西拿出去给你的开发组长和后端一起审核,确保大家的意见一致。 控制层也是这么操作。 至于异常定义就参考一楼的观点就行。 至于不属于你的范围的异常,那当然是直接丢出去显示;或者跟后端达成协议,抛一个统一的异常信息给用户(例如 502),然后将详细的异常记录到日志里,方便后期调试(通常这不由前端和 controller 层处理)。这些异常信息记录能力还可以不用部署到生产环境,根据环境确定要不要写异常。 有的时候,异常还是安全敏感的,但是这通常不由前端和控制层程序员考虑。 |
3
MinQ 2020-12-07 17:29:19 +08:00
刚看到是 node.js ,有点尴尬
|
4
ChevalierLxc 2020-12-07 17:46:19 +08:00
@MinQ 实现思路一样啊,不同语言有区别吗?
|
5
MinQ 2020-12-07 17:53:48 +08:00
@ChevalierLxc 理是这个理,我这不是当成 Java 说了个 ServiceException 么
|
6
golangLover OP @saulshao 谢谢你的看法。但是我是后端。。。。
|
7
ychost 2020-12-07 20:41:54 +08:00
前端一般都只包含一个 code 然后提示网络错误,出问题去服务端去查就行了
|
8
ychost 2020-12-07 20:42:23 +08:00
你这个没必须在 controller 内部 try catch,spring 可以抓全局的异常,根据 instance of 去构造返回就行了
|
10
IvanLi127 2020-12-08 12:37:11 +08:00 via Android
一般框架都能全局拦截响应,拦下来处理呗?
|
11
KouShuiYu 2020-12-16 14:12:27 +08:00
我是这么做的
自定义一个异常 ```js class CustomError extends Error { constructor({ code, msg }, message) { super(message || msg); this.code = code; this.msg = message || msg; } } module.exports = CustomError; ``` 拦截异常 ``` const CustomError = require('../utils/customError'); /** *拦截自定义异常统一处理 */ const errorhandler = () => async (ctx, next) => { try { await next(); } catch (error) { ctx.logger.error(error); if (error instanceof CustomError) { return ctx.error(error, error.message); } return ctx.error(); } }; module.exports = errorhandler; `` 然后抛出异常就行了 ``` throw new CustomError(ERROR.ALREADY_EXIT, `advertiser ${name} already exit`); ``` |