请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于lin-Validator的疑问

lin-validator会捕捉到验证过程中产生的异常,并以ParameterException抛出

但是这里有个问题,就是当用户用自定义验证函数验证email的时候,使用了Sequelize,如果Sequelize抛出异常,那么也会被包装成ParameterException抛出

当全局异常处理中间件catch到这个异常的时候,这个异常已经变成了ParameterException,而ParameterException是会被返回给用户的。

那么每当验证器里的出现数据库异常,抛出一些敏感信息时,也会被当做HttpException抛出。

这非常不合理

正在回答 回答被采纳积分+3

3回答

7七月 2019-07-19 00:01:08

我觉得没必要,如果在Lin-validator里验证说明是和入参有关的,如果有错误,那么也不会把敏感信息抛出去。

1 回复 有任何疑惑可以回复我~
  • 提问者 russellxu #1
    老师,你看下我的想法有没问题。还是多此一举
    回复 有任何疑惑可以回复我~ 2019-07-19 00:33:55
  • 7七月 回复 提问者 russellxu #2
    这不可能的,你这才是把服务器信息返回给了客户端。怎么能有服务器异常就把完整信息返回去呢?那用户岂不是看到了?
    回复 有任何疑惑可以回复我~ 2019-07-19 11:30:52
  • 提问者 russellxu 回复 7七月 #3
    没有返回给客户端详细信息  只是返回了"服务器内部错误"几个字。
    回复 有任何疑惑可以回复我~ 2019-07-19 11:44:16
提问者 russellxu 2019-07-19 00:32:01

我改了一下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 回复 有任何疑惑可以回复我~
提问者 russellxu 2019-07-18 21:40:24

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

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号