删除后的SQLite回调
我正在尝试删除功能,确认删除了某些内容。如果未找到行或已将其删除,则当前代码行变量将返回空白。
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.我如何区分它们?
我知道我可以在删除它之前进行选择查询,但必须有更好的方法。
回答如下:来自this tutorial
如果
DELETE
语句成功执行,则回调函数的this
对象将包含changes属性,该属性存储已删除的行数。
您应该考虑使用run
方法,而不是all
方法用于DELETE查询,因为您不期望任何结果。
摘录自api doc
使用指定的参数运行SQL查询,然后调用回调。它不会检索任何结果数据。
...
如果执行成功,则此对象将包含两个名为lastID的属性和更改,这些属性分别包含最后插入的行ID的值和受此查询影响的行数。请注意,当查询是成功完成的INSERT语句时,lastID仅包含有效信息,并且当查询成功完成UPDATE或DELETE语句时,更改仅包含有效信息。在所有其他情况下,这些属性的内容不准确,不应使用。 .run()函数是唯一设置这两个值的查询方法;所有其他查询方法(如.all()或.get())都不会检索这些值。