我从头开始做了这件事,它仍然给我一个错误......
我已经
了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。
答案 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的响应对象的功能,所以我查看了这个发送函数的源代码:
chunk是你在这里发送的:字符串(' {" a":3}')
this.set('Content-Type', setCharset(type, 'utf-8'))
here express帮助我们使用utf-8连接内容类型,以便服务器再次发送标题
这就是你得到错误的原因。
聚苯乙烯。 对不起我的英语不好,我希望你理解我试图解释的内容。