关于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里验证说明是和入参有关的,如果有错误,那么也不会把敏感信息抛出去。

1
3
russellxu
回复
7七月
没有返回给客户端详细信息 只是返回了"服务器内部错误"几个字。
2019-07-19
共3条回复

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("记录日志。。。")
    }
}


0
0

russellxu

提问者

2019-07-18

数据库操作时,还是应该try...catch...一下,然后手动抛出异常比较合理。老师觉得呢

0
0

Node.js+Koa2+MySQL打造前后端分离精品项目《旧岛》

理解异步编程本质/培养面向对象思维,独立完成Node.js服务端开发

2223 学习 · 878 问题

查看课程