Javascript 如果给定路由参数,则返回JSON

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'); }

我正在开发一个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');
}
当我想要呈现页面时,我使用
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);
    }
});