我正在使用restify模块启动节点js Web服务器。nodejs restify错误 - 处理为静态函数的回调服务请求
server = restify.createServer();
server.post('/getData', DataManager.getData);
处理器为/getData
路径是这样的: -
DataManager.prototype.getData = function(request, response, next) {
var body = JSON.parse(request.body);
var key = body.key;
callback = function(err, instance) {
if(!err && instance) {
response.send(instance);
}
else {
response.send('err');
}
return next();
}
MongooseModel.findOne(key, callback);
}
当我拍不同的有效载荷2个并发请求/getData
,服务器抛出[Error: Can't set headers after they are sent.]
错误,并且不会给第二请求作出响应。
我正在寻找补救办法。
-
我认为,对待的RESTify作为DataManager.getData
一个静态函数。它使用一个新的对象DataManager
来向/getData
提供每个请求,而不是使用它的单个静态实例。虽然第一个请求仍然按nodejs
执行,但第二个请求尝试发送响应,这就是为什么nodejs说can't set headers after they are sent
。我得出这个结论,因为我试着拍摄两个连续的请求,而不是平行的请求,我的代码在这种情况下工作得很好。
声明与VAR帮助回调。你能否详细说明为什么这会起作用?有和没有var的回调有什么区别?我是一个JavaScript初学者。 – haltTm 2013-05-14 10:31:19
没有var你的功能是“全球化”,老实说,我不知道什么是“关闭”(我认为所有的调用回调采取最后的功能,但不知道) – 2013-05-14 11:02:18
随着var你创建一个本地实例或你的函数为每getdata调用,你肯定会关闭它.....希望它更清晰,像这样:) – 2013-05-14 11:04:56