Express-使用res.render()和swig引擎时的自定义内容类型

Express-使用res.render()和swig引擎时的自定义内容类型,express,Express,我使用Swig在Express中呈现JSON模板 我包括以下中间产品: app.engine('json', require('swig').renderFile); app.set('view engine', 'json'); app.set('views', app.get('templates_dir')); 然而,当呈现我的模板时,我得到的内容类型是:text/html;字符集=utf-8 当使用上面声明的json引擎时,有没有一种简单的方法来定制http头 或者我应该不可避免地引导

我使用Swig在Express中呈现JSON模板

我包括以下中间产品:

app.engine('json', require('swig').renderFile);
app.set('view engine', 'json');
app.set('views', app.get('templates_dir'));
然而,当呈现我的模板时,我得到的内容类型是:text/html;字符集=utf-8

当使用上面声明的json引擎时,有没有一种简单的方法来定制http头


或者我应该不可避免地引导res.render并手动设置标题,还是仅仅创建另一个方法,比如res.renderJSON,这是我试图回避的

试试这个,我不确定res.render是否会再次尝试设置内容类型头:

function setJsonHeader(req, res, next){
  res.set('Content-Type', 'application/json');
  next();
};

// apply the middleware to all routes, before your router:
app.use(jsonMiddleware);
app.use(app.router);

// or instead, apply it selectively:
app.use(app.router);
app.get('/api/*, setJsonHeader);
app.get('some/other/json'
, setJsonHeader
, function(req, res, next){
  var data = {foo:'bar'};
  res.render('aJSONTemplate', data)
});