我正在尝试进行删除功能,以确认已删除某些内容。在当前代码行中,如果找不到或删除该行,则该变量变回空。
app.delete('/api/devices/:id', (req, res) => {
db.all('delete from devices where id = ' + req.params.id, (err, rows) =>
{
if (err) {
return res.status(500).send(err)
}
else {
return res.status(204).send()
}
})
})
如果找不到它,我想返回404,如果它实际上被删除了,我想返回204。如何区分它们?
我知道我可以在删除查询之前进行选择查询,但是必须有更好的方法。
答案 0 :(得分:1)
如果
DELETE
语句成功执行,则{ 回调函数将包含存储的changes属性 删除的行数。
由于不希望有任何结果,因此应考虑将this
方法而不是run
方法用于DELETE查询。
使用指定的参数运行SQL查询并调用 之后回调。它不会检索任何结果数据。
...
如果执行成功,则此对象将包含两个 名为lastID的属性,以及包含 最后插入的行ID和受此查询影响的行数 分别。请注意,lastID仅在以下情况下包含有效信息: 该查询是成功完成的INSERT语句和更改 仅在查询成功时包含有效信息 完成的UPDATE或DELETE语句。在所有其他情况下,内容 这些属性中的一个是不准确的,不应使用。运行() 函数是设置这两个值的唯一查询方法;所有 其他查询方法(例如.all()或.get())不会检索这些 值。
答案 1 :(得分:0)
如果其他人点击此页面搜索sqlite3 this.lastID
和sqlite this.changes
,在删除查询后返回undefined
;
上面的代码片段应该是:
app.delete('/api/devices/:id', (req, res) => {
db.run('delete from devices where id = ?', req.params.id, function(err) {
if (err) return res.status(500).send(err)
return res.status(204).send(this.lastID) // or this.changes
})
})
这些是 OP 片段中缺少的内容:
run
命令,而不是 all
顺便说一下内存效率低下...this
上下文会丢失run
方法回调只有一个参数,即错误对象