在sequelize ORM查询语句中处理错误的位置?

时间:2016-02-11 11:11:31

标签: javascript express sequelize.js

我在Node / Express中使用Sequelize ORM。

我有两个表,User和Item。 Item有一个链接到UserId的外键。

当我尝试创建一个UserId无效的项目(在Users表中不存在)时,会抛出“SequelizeForeignKeyConstraintError”并导致应用程序因未处理而崩溃。

我遇到的问题是:

我在哪里处理错误?

这是我的代码。

{"status_code":0,"response":{"names":"Bon Charles"},"status_message":"Succeeded."}

2 个答案:

答案 0 :(得分:26)

如果要处理特定错误,请附加.catch处理程序

models.Item.create({
  title : req.body.title,
  UserId : req.body.UserId
}).then(function(item){
  res.json({
    "Message" : "Created item.",
    "Item" : item
  });
}).catch(function (err) {
  // handle error;
});

如果你想更频繁地处理错误(即显示一个很好的错误消息,而不是杀死你的服务器,你可能想看看unhandledexception

https://nodejs.org/api/process.html#process_event_uncaughtexception

如果您使用express,它还包含一些错误处理工具http://expressjs.com/en/guide/error-handling.html

答案 1 :(得分:4)

您可以通过执行以下操作来处理所有ORM错误以返回HTTP 500状态和一些默认错误消息

router.use((error, request, response, next) => {
  response.status(error.status || 500).json({
    status: 'error',
    error: {
      message: error.message || serverErrorMsg,
    },
  });
});

上面的代码还允许您使用将发送到客户端的自定义消息引发错误