是否可以针对单条路线提供多种功能。
app.get('/r1', function(req, res) {
res.send('hello world 1');
});
app.get('/r1', function(req, res) {
res.send('hello world 2');
});
原因:内容协商,https://en.wikipedia.org/wiki/Content_negotiation我根据不同作用域中的接受标头设置了不同的模块,因此我无法在路由器中从一个接触到另一个。
请告知。
答案 0 :(得分:0)
虽然您最初描述的每条路线不能有多个功能,但您可以在路线内进行内容协商,
看看req.is(type)
http://expressjs.com/api.html
的内容
app.get('/r1', function(req, res) {
if(req.is('html')) {
//do your html stuff
return res.send('It was html')
}
if(req.is('json')) {
//do your json stuff
return res.send('It was json')
}
//wasn't html or json, so send a 406
res.status(406);
res.send('Content type not acceptable');
});
或者,有人做了一个方便的小npm包,完成上述操作: https://www.npmjs.com/package/express-negotiate
修改强>
根据评论,可以在Accept标头上使用res.format
:
请参阅我之前的链接
app.get('/r1', function(req, res) {
res.format({
'text/plain': function(){
res.send('hey');
},
'text/html': function(){
res.send('<p>hey</p>');
},
'application/json': function(){
res.send({ message: 'hey' });
},
'default': function() {
// log the request and respond with 406
res.status(406).send('Not Acceptable');
}
});
});