为什么express-js没有设置Content-Type头?

30

我有如下代码:

var express = require('express'),
    app = express.createServer();

app.get("/offline.manifest", function(req, res){
  res.contentType("text/cache-manifest");
  res.end("CACHE MANIFEST");
});

app.listen(8561);

Chrome浏览器中的网络选项卡显示为text/plain。为什么没有设置头文件呢?

上面的代码是可以工作的,我的问题是由于链接到一个旧版本的express-js引起的

3个回答

47

res.type('json')现在也可以使用,正如其他人所说,你可以简单地使用
res.json({your: 'object'})


2
这太棒了,因为它仍然允许您使用 res.send(obj) 以JSON格式发送对象。比 res.end(JSON.stringify(obj)) 更好。 - Joseph Nields
1
你也可以链式调用它,res.type('json').send({your: 'object'}); 或者像 @danday74 所指出的那样,简单地使用 res.json({your: 'object'}); - Steve Kehlet

24

试试这段代码:

var express = require('express'),
    app = express.createServer();

app.get("/offline.manifest", function(req, res){
  res.header("Content-Type", "text/cache-manifest");
  res.end("CACHE MANIFEST");
});

app.listen(8561);

(我假设您正在使用最新版本的Express,2.0.0)

更新:我刚刚使用Firefox 3.6.x和Live HTTP Headers进行了快速测试。这是附加组件的输出:

 HTTP/1.1 200 OK
 X-Powered-By: Express
 Content-Type: text/cache-manifest
 Connection: keep-alive
 Transfer-Encoding: chunked

在尝试之前,请确保清除浏览器缓存。


我刚在我的本地开发环境中测试过,完美运行 (请参见更新)。 - schaermu
啊哈!由于某种原因,它链接到了一个旧版本的node。谢谢! :) - Kit Sunde

2

使用res.json()代替res.send(),它会自动设置内容类型为application/json


这完全没有回答问题。 - sjmeverett
不涉及问题,无法提供翻译。 - Ed Bishop
1
在我的情况下,确切的问题是:为什么express-js没有设置Content-Type头?在我的情况下,我学到了使用res.json() - ps0604

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接