2

获取 Sequelize.js 模型的 ValidationFailed 时出现此错误:

未处理的拒绝 SequelizeValidationError:验证错误:登录名不是有效的电子邮件

但是只有在使用 ES7async函数时才会出现这种未处理的拒绝,请参见以下代码:

export async function create (req, res) {
  try {
    res.json({ admin : await Admin.create(req.body) });
  } catch (err) {
    const message = {
      Login : err.errors.map(error => error.message),
    };
    res.status(400).json({ error : 'ValidationFailed', message : message });
  }
}

但是,当我使用 ES5 承诺格式时,它不会抛出异常。

export function create (req, res) {
  Admin.create(req.body)
    .then(admin => {
      res.json({ admin : admin });
    }, err => {
      const message = {
        Login : err.errors.map(error => error.message),
      };
      res.status(400).json({ error : 'ValidationFailed', message : message });
    });
}

有任何想法吗?

4

1 回答 1

0

要等待使用异步函数解析的承诺,您需要使用await关键字。

export async function create (req, res) {
  try {
    await res.json({ admin : await Admin.create(req.body) });
 // ^^^^ very important to include
  } catch (err) {
    const message = {
      Login : err.errors.map(error => error.message),
    };
    res.status(400).json({ error : 'ValidationFailed', message : message });
  }
}

该错误不再在没有async关键字的范围内,并成为未处理的异常。

于 2015-08-07T02:26:36.187 回答