背景
練習でSequelizeライブラリを使用して簡単なウェブアプリケーションを作っていた。update
を使用して、データベースをアップデート(書き換え)しようとしたら、次のエラーが出た。
Unhandled rejection AssertionError [ERR_ASSERTION]: Missing where attribute in the options parameter
結論から言うと、とてもあっけなく解決した。
環境
- Node.js(v10.14.2)
- Express(4.16.0)
解決方法
ただ単に、updateの書き方を間違っていた。問題の箇所はPOSTデータを受け取り、Task
というデータベースを編集するあたり。
router.post('/:taskId', authenticationEnsurer, (req, res, next) => { Task.findOne({ where: { taskId: req.params.taskId } }).then((task) => { if (task) { if (parseInt(req.query.edit) === 1) { const updatedAt = new Date(); task.update({ taskId: task.taskId, taskName: req.body.taskName.slice(0, 255) || '(名称未設定)', memo: req.body.memo, deadLine: req.body.deadLine, createdBy: req.user.id, updatedAt: updatedAt }).then((task) => { res.redirect('/tasks/' + task.taskId); }); } else {
なおコード上部ではTaskという変数名でmodelをrequireしている。
const Task = require('../models/task');
本来ならtask.update
とするところを、Task.update
にしてしまっていた。
findOne
でデータベースから絞り込み、コールバックで受け取ったtask
に対してupdate
をすべきだった。