在我工作的应用程序中,如果使用并发和并行请求方法进行测试,我遇到“头已发送错误”。节点,是每个请求和响应唯一或缓存,而不考虑URL
最终我解决了问题,使用!response.headersSent
但我的问题是为什么我被迫使用它?是节点缓存相似的请求并重复使用它们以用于下一次重复呼叫。
if(request.headers.accept == "application/json") {
if(!response.headersSent) {response.writeHead(200, {'Content-Type': 'application/json'})}
response.end(JSON.stringify({result:{authToken:data.authToken}}));
}
编辑
var express = require('express');
var app = express();
var server = app.listen(process.env.PORT || 3000, function() {
console.log('Example app listening at http://%s:%s', server.address().address, server.address().port);
});
编辑2: 的另一个问题是在使用摩卡,超级经纪人测试和而如果我只是通过邮递员发送另一个请求就在旁边,的一个进步测试摩卡结束测试结束超时错误。我正在采取这些步骤来确保代码的生产已准备好同时进行并行请求?请告诉我可以采取哪些措施来确保节点/代码在压力下工作。
编辑3:
app.use(function(request, response, next){
request.id = Math.random();
next();
});
你用什么软件包为你的HTTP?正常节点'http'? – Rudie 2014-11-01 23:18:34
在您的应用程序中重现此问题,如果您按cmd + r(保持按下以进行持续刷新),则会使节点崩溃,如果没有“!response.headersSent” - 意味着节点重新使用请求/响应对象 – user2727195 2014-11-01 23:28:50
关于头文件已被发送的错误几乎总是因为你没有正确处理异步操作,因此你的代码结束了顺序运行。与缓存无关。 – jfriend00 2014-11-02 00:11:48