Express不会发送标题

时间:2015-11-20 01:36:17

标签: node.js express

我从头开始做了这件事,它仍然给我一个错误......

我已经

express test 

然后

cd test && npm install

我已经编辑了app.js,添加了这样的路线:

app.get('/test',function(req,res) {
  res.writeHead(200, {"Content-Type": "application/json"});
  return res.send('{"a":3}');
});

然后我运行节点

node app.js

当我尝试访问http://server/test时,我得到了

Error: Can't set headers after they are sent.

我正在使用 节点v4.2.1,Express 2.5.8,npm 3.4.0。

这恰好发生在Express上,如果我在Node上创建一个简单的服务器,我就可以使用writeHead。

2 个答案:

答案 0 :(得分:1)

使用res.setHeader

怎么样?
var express = require('express');
var app = express();

app.get('/', function (req, res) {
    res.setHeader("Content-Type","application/json");
  res.send('{}');
});

var server = app.listen(3000, function () {
  var host = "localhost";
  var port = server.address().port;

  console.log('Example app listening at http://%s:%s', host, port);
});

答案 1 :(得分:1)

res.writeHead(200, {"Content-Type": "application/json"});时,您将所有响应标头发送到客户端,因此您无法再次发送标头。

因为res.send是express的响应对象的功能,所以我查看了这个发送函数的源代码:

enter image description here

  • chunk是你在这里发送的:字符串(' {" a":3}')

  • this.set('Content-Type', setCharset(type, 'utf-8')) here express帮助我们使用utf-8连接内容类型,以便服务器再次发送标题

这就是你得到错误的原因。

聚苯乙烯。  对不起我的英语不好,我希望你理解我试图解释的内容。