Javascript 如果给定路由参数,则返回JSON
我正在开发一个Express应用程序,希望尝试获取与reddit功能类似的路由,在几乎所有URL中添加Javascript 如果给定路由参数,则返回JSON,javascript,json,node.js,express,Javascript,Json,Node.js,Express,我正在开发一个Express应用程序,希望尝试获取与reddit功能类似的路由,在几乎所有URL中添加.json都会返回json,而不是呈现的模板 我使用Jade作为渲染引擎,通过Express中的应用程序配置设置: app.set('view engine', 'jade'); app.set('view options', { layout: false }); if (app.get('env') == 'prod') { app.enable('view cache'); }
.json
都会返回json,而不是呈现的模板
我使用Jade作为渲染引擎,通过Express中的应用程序配置设置:
app.set('view engine', 'jade');
app.set('view options', {
layout: false
});
if (app.get('env') == 'prod') {
app.enable('view cache');
}
当我想要呈现页面时,我使用res.render
:
res.render('sometemplatefile', {
title: 'This is my template',
data: users
})
我的路线定义为标准路线,带有Passport.js中间件:
app.get('/someurl', passportConf.isAuthenticated, someController.getSomeURL);
我知道我可以添加一个可选的route参数,如下所示:
app.get('/someurl(/:flag)', passportConf.isAuthenticated, someController.getSomeURL);
但是,在每个路由控制器中都有if(req.params.flag==='json'){return res.json(blah)}
是非常难看的
是否可以使用中间件或类似工具绕过标准操作res.render
app.use(function(req, res, next) {
res.handleResopnse = function(req, res, data, template, title) {
if (req.params.flag === 'json'){
return res.json(data);
}
else{
res.render(template, {
'title': title,
'data': data
});
}
}
}
在someController.getSomeURL
中使用
res.handleResopnse(req,res,data,template,title);
您可以使用一个函数,根据以下标志处理数据的呈现:
/*
* Helper function
*/
// Returns data to client, either in template or in JSON object
function sendData(req, res, data) {
if (req.params.flag === "json") {
return res.json(data);
} else {
return res.render('sometemplatefile', {
title: 'This is my template',
data: data.users
});
}
};
/*
* Routes
*/
// Description for someurl
app.get('/someurl', passportConf.isAuthenticated, function(req, res, next) {
// Get the data needed for this route
db.fetchData(x, function(data, err) {
sendData(req, res, data);
}
});