如果用戶訪問路由並且接受標頭只允許JSON,我想發送JSON,並且如果用戶訪問路由並且接受標頭不允許JSON,我想將用戶重定向到頁面。如何使路由重定向或發回JSON取決於接受的標題?
我的解決方案非常黑客,但它涉及檢查req.headers.accept並查看該字符串是否包含json。如果是這樣,我返回JSON,否則,我重定向。有沒有更優化的解決方案?
如果用戶訪問路由並且接受標頭只允許JSON,我想發送JSON,並且如果用戶訪問路由並且接受標頭不允許JSON,我想將用戶重定向到頁面。如何使路由重定向或發回JSON取決於接受的標題?
我的解決方案非常黑客,但它涉及檢查req.headers.accept並查看該字符串是否包含json。如果是這樣,我返回JSON,否則,我重定向。有沒有更優化的解決方案?
您可以嘗試res.format
方法。
res.format({
'application/json': function(){
res.send({ message: 'hey' });
},
default: function(){
res.redirect('nojson.html');
}
});
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"));
你能分享一些示例代碼? – Mark