Есть ли способ для Sequelize проверить, существует ли строка в таблице, прежде чем инициировать действие удаления?

#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)
            })
    })();
})