Node.js 元朗快车';不发送标题

Node.js 元朗快车';不发送标题,node.js,express,Node.js,Express,我从零开始做这件事,它仍然给我一个错误 我跑了 express test 然后 我已经编辑了app.js,添加了如下路线: app.get('/test',function(req,res) { res.writeHead(200, {"Content-Type": "application/json"}); return res.send('{"a":3}'); }); 然后我运行node node app.js 当我尝试访问时,我得到 我正在使用 节点v4.2.1,Expre

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

我跑了

express test 
然后

我已经编辑了app.js,添加了如下路线:

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

node app.js
当我尝试访问时,我得到

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


这只发生在Express上,如果我在节点上创建一个简单的服务器,我可以使用writeHead。

如何使用
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);
});
res.writeHead(200,{“内容类型”:“application/json”})时,您将所有响应头发送到客户端,因此无法再次发送头

由于
res.send
是express的响应对象的函数,因此我查看此发送函数的源代码:

  • chunk是您在此处发送的内容:String(“{”a“:3}”)

  • this.set('Content-Type',setCharset(Type,'utf-8'))
    here express帮助我们将内容类型与utf-8连接起来,因此服务器需要再次发送标头

这就是为什么会出现错误

附言。
很抱歉我的英语不好,我希望你能理解我试图解释的内容。

如果你是从头开始做的,那你到底为什么要使用2.x版?!?!自2012年以来就没有更新过。非常感谢!我终于明白了为什么会发生这种情况,这让我发疯=)解决方案当然是使用setHeader,正如@TLJ所说的那样,但是知道为什么这样做不起作用是很好的。
Error: Can't set headers after they are sent.
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);
});