ドットインストールの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>