ドットインストールのExpress入門の補足
ドットインストールの「Express入門」の「#19 記事を更新/削除してみよう」でちょっと躓いたのでメモしておく。
具体的には記事の削除ボタンを押すと、一番上の記事しか消えないという状況に。
で、理由を調べてみるとpost.jsの以下の記事削除処理で、req.body.idがundefinedになっている事が原因と分かった(splice()の第一引数にundefinedを渡すと0と同じになる?)。
exports.destroy = function(req, res) { posts.splice(req.body.id, 1); res.redirect('/'); };
で、何でundefinedになってしまうかと言うと、index.ejsで以下のようにidをhidden属性で渡していないから。
<form method="post" action="/posts/<%= i %>"> <input type="hidden" name="_method" value="delete"> <input type="submit" value="del"> </form>
ということで、以下のようにすれば問題解決。
<form method="post" action="/posts/<%= i %>"> <input type="hidden" name="id" value="<%= i %>"> <input type="hidden" name="_method" value="delete"> <input type="submit" value="del"> </form>