如果用户访问路由并且接受标头仅允许JSON,我想要发回JSON,并且如果用户访问路由并且接受标头不允许JSON,我想将用户重定向到页面。
我的解决方案非常hacky,但它涉及检查req.headers.accept并查看字符串是否包含json。如果是,我返回JSON,否则,我重定向。有更优化的解决方案吗?
答案 0 :(得分:3)
您可以尝试res.format
方法。
res.format({
'application/json': function(){
res.send({ message: 'hey' });
},
default: function(){
res.redirect('nojson.html');
}
});
答案 1 :(得分: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"));