如何处理序列唯一约束错误?

时间:2018-12-23 12:43:19

标签: node.js sequelize.js

我是javascript新手,需要处理续集中的约束错误。我到处都搜索了与此主题相关的内容,但是仍然找不到合适的答案。我的尝试如下。

app.post('/api/users', (req, res) => {
  try {
    console.log(req.body);
    User.create(req.body)
        .then(user=> res.json(user));
  } catch (error) {
    console.log("Error: "+error);
  }});

这里还无法捕获到异常。对于有效的用户输入,它可以发布请求。所以我只需要知道一种处理异常的方法即可。

2 个答案:

答案 0 :(得分:0)

您可以将Promise.then().catch()一起使用,或将async/awaittry/catch一起使用

这是Promise

app.post('/api/users', (req, res) => {
    console.log(req.body);
    User.create(req.body)
        .then(user=> res.json(user))
        .catch(err => console.log(err))
});

这是async/await

app.post('/api/users', async (req, res) => {
    try {
      console.log(req.body);
      const user = await User.create(req.body);
      res.json(user);
    } catch (error) {
      console.log("Error: "+error);
    }
});

答案 1 :(得分:0)

好像您正在混合两种不同的样式。如果您使用的是then(),则没有必要使用try catch块:

app.post('/api/users', (req, res) => {
  console.log(req.body)
  User.create(req.body)
    .then(user => res.json(user))
    .catch(error => console.log('Error: ' + error))
})

另一种样式是使用async包。使用异步,您的代码将如下所示:

app.post('/api/users', async (req, res) => {
  console.log(req.body)
  try {
    const user = await User.create(req.body)
    res.json(user)
  }
  catch (error) { console.log('Error: ' + error) }
})

这两种方法都有各自的优点和缺点,并且很多人都适当使用它们,例如,像第二个示例中那样,await方法仅在用async声明的函数中起作用:async (req, res)。在这种情况下,使用then()样式的承诺处理是一种更好的方法