#node.js #express #sequelize.js
#node.js #выразить #sequelize.js
Вопрос:
Я использую 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)
})
})();
})
Это отправляет мне статус 200 OK, даже если id
передаваемое значение отсутствует в базе данных. Я попытался настроить переменную count вместе с User.count(...)
проверкой доступности строк, но с частичным успехом. Но это кажется немного запутанным. Есть ли лучший способ?
Ответ №1:
Просто добавляю к вашему собственному (@Meera) ответу.
Это не обходной путь, на самом деле так работает библиотека. Destroy вернет количество удаленных строк. Так, например:
User.destroy({where: {name: 'X'}})
.then(numberRows=> {
console.log(`${numberRows} User rows deleted`);
res.sendStatus(numberRows?200: 406)
});
https://sequelize.org/api/v6/class/src/model.js ~модель#статический метод-уничтожить
Ответ №2:
Кажется, у меня есть обходной путь. Проверяя возвращаемое значение в выполненной части обещания, моя проблема решена:
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)
})
})();
})