0

我正在使用 restify 模块启动节点 js Web 服务器。

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);
}

/getData当我使用不同的有效负载向 2 个并发请求发送时,服务器会抛出[Error: Can't set headers after they are sent.]错误并且不响应第二个请求。

我正在寻找解决此问题的方法。

--

我认为,restify 将DataManager.getData其视为静态函数。/getData而不是使用它的新对象为每个请求提供服务,DataManager而是使用它的单个静态实例。虽然第一个请求仍在执行nodejs,但第二个请求尝试发送响应,这就是 nodejs 说的原因can't set headers after they are sent。当我尝试拍摄两个顺序请求而不是并行请求时,我得出了这个结论,并且我的代码在这种情况下工作得很好。

4

1 回答 1

2

您的回调有上下文问题!!!!

您应该为会话指定 response & next ...您是否尝试使用 a 声明它,var我认为它可能会解决您的问题...

var callback=.....

在其他情况下,您需要将 response() 和 next() 都传递给它...

于 2013-05-14T08:33:38.730 回答