首页 > 解决方案 > 使用 throw 错误时,passport.authenticate() 中出现未处理的承诺拒绝错误

问题描述

我正在尝试将发生的身份验证错误作为 Node.js/Express JSON 响应 API 发送出去。

我的代码:

console.log("LOGIN USER...");
  try {
    let errors = validationResult(req);
    if (!errors.isEmpty()) throw { code: 400, message: errors }
    let authopt = { usernameField: 'email', passwordField: 'password' };
    passport.authenticate('local', authopt, (err, user, info) => {
      if (err || !user) {
        console.log("ERROR IS PASSING FROM HERE.");
        throw { code: 500, message: err }
      }
      else {
        const token = user.generateJWT();
        return res.status(200).json({
          "jwtToken": token,
        });
      }
    })(req, res, next)
  } catch (error) {
    return res.status(error.code || 500).send(error.message || "Unknown internal server error ! .");
  }

端点调用后,消息“错误从这里传递。” 在我的控制台中显示错误:

(节点:9392)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。(拒绝 id:1)(节点:9392)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。

我正在通过保持相同的代码结构来寻找解决方案。有什么帮助吗?

标签: javascriptnode.jsexpresspassport.jscustom-error-handling

解决方案


推荐阅读