2013-07-23 35 views
0

如果用戶訪問路由並且接受標頭只允許JSON,我想發送JSON,並且如果用戶訪問路由並且接受標頭不允許JSON,我想將用戶重定向到頁面。如何使路由重定向或發回JSON取決於接受的標題?

我的解決方案非常黑客,但它涉及檢查req.headers.accept並查看該字符串是否包含json。如果是這樣,我返回JSON,否則,我重定向。有沒有更優化的解決方案?

+0

你能分享一些示例代碼? – Mark

回答

3

您可以嘗試res.format方法。

res.format({ 
    'application/json': function(){ 
    res.send({ message: 'hey' }); 
    }, 

    default: function(){ 
    res.redirect('nojson.html'); 
    } 
}); 
0

cr0描述的方法可能是'正確的方法'。我不知道這種新的輔助方法。

該解決方案是正確的。您可以使用req.get以不區分大小寫的方式獲取標題,並使用regexp來檢查值。通常我使用以下內容。

module.exports = function() { 
    function(req, res, next) { 
     if(req.get("accept").match(/application\/json/) === null) { 
     return res.redirect(406, "/other/location"); 
     }; 
     next(); 
    } 
} 

然後,這可以用作中間件。

app.use(require("./jsonCheck")()); 

您還可以通過更改導出的函數,使模塊更加詳細並重定向到自定義位置。

module.exports = function(location) { 
    function(req, res, next) { 
     if(req.get("accept").match(/application\/json/) === null) { 
     return res.redirect(406, location); 
     }; 
     next(); 
    } 
} 

,並使用它像這樣

app.use(require("./jsonRedirect")("/some.html"));