【问题标题】:Mongoose validation exception not caught未捕获 Mongoose 验证异常
【发布时间】:2015-04-16 06:09:42
【问题描述】:

我正在 MEAN 应用中设置用户注册。但是,我在错误处理方面遇到了困难,尤其是在 Mongoose 验证方面。

在下面的代码中,当我向我的 API 提供错误的电子邮件时,mongoose 抛出的异常不会在我的块中捕获。

try {
    User.save(function (err, user) {
        if (err) throw err; //This exception in not catched :(

        res.status(200).json({
            _status: 200,
            _content: {
                message: "OK",
                data: user
            }
        });
    });
} catch (err) {
    res.status(400).json({
        _status: 400,
        _content: {
            message: err.toString()
        }
    });
}

我怎样才能捕捉到这个异常?

【问题讨论】:

  • 你能通过执行 console.log(err) 来检查你的错误返回什么吗?在你的 User.save 回调中
  • 嗨,控制台的第一行输出给我:if (err) throw err; ^ ValidationError: This email is not valid
  • 您必须在回调中使用 try catch。
  • 感谢@yalamber 这个技巧奏效了。但我不明白为什么。回调中抛出的错误是否从外部不可见?
  • 执行try catch块时,没有报错。由于您的 User.save 是异步的,它只会在稍后执行回调时抛出错误。您可能需要研究 javascript 的异步特性。

标签: node.js mongodb mongoose mean


【解决方案1】:

你为什么不这样做呢:

User.save(function (err, user) {
  if (err) {
    return res.status(400).json({
        _status: 400,
        _content: {
            message: err.toString()
        }
    });
  }
  res.status(200).json({
    _status: 200,
    _content: {
      message: "OK",
      data: user
    }
  });
});

您的代码将无法工作,因为 try catch 无法捕获回调中抛出的异常。

【讨论】:

  • 感谢您的帮助,我会这样做的!
猜你喜欢
  • 2020-01-01
  • 2021-04-02
  • 2010-09-28
  • 2012-05-31
相关资源
最近更新 更多