2016-12-15 13 views
0

POSTとGETの両方のリクエストを1つのリクエストとして扱いたいので、すべてのルーティングとそれに続く関数はすべてを一度複製するのではなく、 GETの場合はPOST、もう一度POSTの場合はノードエクスプレス処理POSTとGETを1つのリクエストとして

これを行う最も簡単な方法は、ミドルウェアを使ってPOSTをGETに早期に変換することです。これに問題はありますか? 302は、同じURLにリダイレクトするよう

if(req.method=='POST'){ 
    req.method = 'GET'; 
    req.query = req.body; 
    delete(req.body); 
} 
+0

ミドルウェアまたはネイティブのnode.jsライブラリのようにexpressを使用していますか? – Mike

+0

ありがとう@Mikke、expressを使用してください(タイトルに記載されています) – crankshaft

+0

ここには大きな問題が1つあります。 GETリクエストには副作用があってはいけません。つまり、ユーザーのショッピングカートにアイテムを追加したり削除したり、リソースを削除したりするなどの目的では使用しないでください。 URLをプリフェッチしたり、ウェブスパイダーがあなたのサイトをクロールするなどして、それに基づいて状態を変更することは決してありません。状態を変更するハンドラは、GET要求に応答してはなりません。 – PMV

答えて

0

あなたは(これらは常に要求をGETしている)すべてのPOSTリクエストにexpress応答を持つことができます。

// Redirect all post requests 
app.post('^*$', function(req, res) { 

     // Now just issue the same request again, this time as a GET 
     res.redirect(302, req.url); 

    }); 
}); 

サイドノート:

はここにいくつかのサンプルコードです、これは動作しますが、私は長期的な解決策としてこれをお勧めしません。 POSTリクエストをGETリクエストとは異なる方法で処理する必要があると判断した場合、メンテナンス性は苦労します。長期的には、POSTとGET要求を同じように扱うのではなく、その処理方法を明確に定義する方がよいでしょう。

0

この場合、両方のハンドラ関数を同じにすることをお勧めします。たとえば。

app.get('/path', handler); 
app.post('/path', handler); 
関連する問題