2016-12-15 90 views
0

我想將POST和GET請求作爲單個請求處理,這樣我的所有路由和後續功能只需處理單個請求,而不是僅複製一次所有內容爲GET和POST再次。節點快速處理POST和GET作爲單個請求

因此,我想這樣做的最簡單方法是在使用中間件的早期將POST轉換爲GET,是否有任何問題?

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

您是使用express作爲中間件還是僅僅是本地node.js庫? – Mike

+0

感謝@Mike,使用快遞(標題中提到) – crankshaft

+0

嗯,這裏有一個主要問題。一個GET請求不能有副作用 - 也就是說,你不能將它用於諸如添加或從用戶的購物車中刪除項目,或刪除資源等等。原因是瀏覽器被允許預取網址,網頁蜘蛛可能會抓取您的網站等,你永遠不會想改變基於此狀態。任何修改任何狀態的處理程序都不應該對GET請求做出響應。 – PMV

回答

0

您可以express所有POST請求的響應爲302重定向到相同的URL(這些總是GET請求)。

下面是一些示例代碼:

// 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); 

    }); 
}); 

邊注:這會工作,但我不會推薦這是一個長期的解決方案。如果您決定確實需要以不同於GET請求的方式處理POST請求,那麼可維護性將成爲一種痛苦。從長遠來看,您最好有一個明確的定義來說明如何處理POST和GET請求,而不是將它們視爲相同。

0

推薦的方法是在這種情況下具有相同的處理函數。例如。

app.get('/path', handler); 
app.post('/path', handler);