在启动删除操作之前,Sequelize 是否有办法检查 table 中是否存在一行?

Is there a way for Sequelize to check if a row exists in the table, before initiating a delete action?

我将 Sequelize ORM 与 NodeJS、Express 和 Postgres 一起使用来设置 CRUD API。我的 delete 路由逻辑如下所示:

app.delete('/deleteuser/:id', authenticateJWT, (req, res) => {
    (async () => {
        await User.destroy({where: {id: req.params.id}})
            .then(() => {
                console.log(`User ${req.params.id} deleted`)
                res.sendStatus(200)
            })
            .catch((err) => {
                console.log(err)
                res.sendStatus(500)
            })
    })();
})

即使我传递的 id 值不在数据库中,这也会向我发送 200 OK 状态。我尝试设置一个计数变量和 User.count(...) 来检查行可用性,并取得了部分成功。但是,这似乎有点令人费解。有没有更好的方法?

我似乎有一个解决方法。通过检查承诺的 onFulfilled 部分中的 return 值,我的问题得到解决:

app.delete('/deleteuser/:id', authenticateJWT, (req, res) => {
    (async () => {
        await User.destroy({where: {id: req.params.id}})
            .then((deletedUser) => {
                if(deletedUser){
                    console.log(`User ${req.params.id} deleted`)
                    res.sendStatus(200)
                } else {
                    console.log(`User ${req.params.id} does not exist`)
                    res.sendStatus(406)
                }
            })
            .catch((err) => {
                console.log(err)
                res.sendStatus(500)
            })
    })();
})

只是添加到您自己的 (@Meera) 回复中。

这不是解决方法,实际上是库的工作方式。销毁它将 return 删除的行数。例如:

User.destroy({where: {name: 'X'}})
            .then(numberRows=> { 
 console.log(`${numberRows} User rows deleted`);
 res.sendStatus(deletedUser?200: 406)

 });

https://sequelize.org/master/class/lib/model.js~Model.html#static-method-destroy