我正在使用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