Обратный вызов SQLite после удаления - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь сделать функцию удаления с подтверждением того, что что-то было удалено.При текущем коде строки переменная возвращается пустой, если строка не найдена или была удалена.

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. Как мне их отличить?

Я знаюЯ могу сделать запрос выбора перед его удалением, но должен быть лучший способ.

1 Ответ

0 голосов
/ 18 февраля 2019

С этого руководства

В случае успешного выполнения оператора DELETE объект this функции обратного вызова будет содержать свойство changes, в котором хранится числоудалено строк.

Следует рассмотреть возможность использования метода run, а не метода all для запроса DELETE, поскольку вы не ожидаете никаких результатов.

Выдержки из api doc

Запускает SQL-запрос с указанными параметрами и впоследствии вызывает обратный вызов.Он не извлекает никаких результатов.

...

Если выполнение прошло успешно, этот объект будет содержать два свойства с именем lastID и изменения, содержащие значениепоследний вставленный идентификатор строки и количество строк, затронутых этим запросом соответственно.Обратите внимание, что lastID содержит только действительную информацию, когда запрос был успешно завершен оператор INSERT, а изменения содержат только действительную информацию, когда запрос был успешно завершен оператор UPDATE или DELETE.Во всех остальных случаях содержание этих свойств неточно и не должно использоваться.Функция .run () является единственным методом запроса, который устанавливает эти два значения;все другие методы запроса, такие как .all () или .get (), не получают эти значения.

...