2012年11月24日土曜日

[node.js + express]フォームデータ を PUT や DELETE で送信する

実行環境
node v0.8.3
express v3.0.3

HTTPメソッドの書き換え


methodOverride ミドルウェアを使うと、フォームのデータを PUT や DELETE といった、POST, GET 以外の HTTPメソッドで(擬似的に)サーバーに送信することが可能になります。

設定は簡単で、送信したい HTTPメソッド名を、_method という名前でフォームから POST で送信するだけです。下記は、フォームデータを DELETE メソッドとして送信する jade のサンプルです。
form(method="POST", action="/entries/#{entry._id}")
  input(type="hidden", name="_method", value="DELETE" )

  input(type="submit", value="削除" )

このフォームで設定されているメソッドはあくまで POST のため、フォームデータは通常通り POST メソッドで送信されます。
しかし methodOverride を使用しているアプリケーションは、送信された _method の値から、リクエストは DELETE メソッドで送信されたと解釈します。(実際には、req.method の値を _method の値で上書きしています。methodOverride の詳しい処理は こちら のソースコードを確認してみてください。)

そのため、上記のフォームから送信されたリクエストは、app.post() ではなく、app.delete() でマッピングされたルートとマッチします。
app.delete('/entries/:id', routes.entries.destroy);

RESTful な URL


methodOverride の HTTPメソッド書き換え機能を利用することで、以下のような RESTful な URL を構築することができます。

app.js
app.get ('/entries', routes.entries.index);
app.post('/entries', routes.entries.create);

app.get('/entries/new'     , routes.entries.new);
app.get('/entries/:id/edit', routes.entries.edit);

app.get   ('/entries/:id', routes.entries.show);
app.put   ('/entries/:id', routes.entries.update);
app.delete('/entries/:id', routes.entries.destroy);

まとめ


methodOverride ミドルウェア を使うと、 form から 任意の HTTP メソッドでデータをサーバーに送信できる。
HTTPメソッド名は、_method という名前で送信する。

1 件のコメント:

  1. Borgata Hotel & Casino, Atlantic City - Dr. Maryland
    Address: 3131 S. 전라남도 출장샵 Main Street, Atlantic 동두천 출장샵 City, NJ 08401 영천 출장샵 The 충주 출장안마 Borgata Hotel and Casino is the flagship property for the famous 평택 출장마사지 casino brand.

    返信削除