关于lin-Validator的疑问
来源:6-4 模型的set操作

russellxu
2019-07-18
lin-validator会捕捉到验证过程中产生的异常,并以ParameterException抛出
但是这里有个问题,就是当用户用自定义验证函数验证email的时候,使用了Sequelize,如果Sequelize抛出异常,那么也会被包装成ParameterException抛出
当全局异常处理中间件catch到这个异常的时候,这个异常已经变成了ParameterException,而ParameterException是会被返回给用户的。
那么每当验证器里的出现数据库异常,抛出一些敏感信息时,也会被当做HttpException抛出。
这非常不合理
写回答
3回答
-
7七月
2019-07-19
我觉得没必要,如果在Lin-validator里验证说明是和入参有关的,如果有错误,那么也不会把敏感信息抛出去。
132019-07-19 -
russellxu
提问者
2019-07-19
我改了一下lin-Validator,老师你看下,这样行吗?
async _check(key, alias = {}) { const isCustomFunc = typeof this[key] == "function" ? true : false let result if (isCustomFunc) { try { await this[key](this.data) result = new RuleResult(true) } catch (error) { //约定手动抛出的都是Error,如果不是Error,代表不是用户抛出的异常 //返回服务器错误,并记录日志 if (error.constructor.name === 'Error') { result = new RuleResult( false, error.msg || error.message || "参数错误" ) } else { //todo:: log result = new RuleResult(false, "服务器内部错误") console.log("记录日志。。。") } }
00 -
russellxu
提问者
2019-07-18
数据库操作时,还是应该try...catch...一下,然后手动抛出异常比较合理。老师觉得呢
00
相似问题
关于异步效验的问题
回答 2
运行 lin-cms 时遇到报错
回答 3