在启动删除操作之前,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
我将 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