2011-06-16 92 views
1

目前我正在研究兩個node.js教程,當我理解每個教程中發生的事情時,我清楚地不明白是什麼。無法理解node.js監聽器

下面的代碼監聽「data」事件,然後將新的數據塊添加到名爲postData的變量中。另一個監聽器將這些數據與其他內容一起發送到我的route.js文件。

request.addListener("data", function (postDataChunk) { 
     postData += postDataChunk; 
     console.log("Received POST data chunk '" + postDataChunk + "'."); 
    }); 

    request.addListener("end", function () { 
     route(handle, pathname, response, postData); 
    }); 

下面的代碼創建一個變量,tailChild,會派生對我的系統日誌中的shell命令「尾巴」,然後嘗試這個數據添加到我的POSTDATA變量:

var spawn = require('child_process').spawn; 
var tail_child = spawn('tail', ['-f', '/var/log/system.log']); 
    tail_child.stdout.on('data', function (data) { 
     postData += data; 
     console.log("TAIL READING: " + data); 
    }); 
tail_child.stdout.on('end', function () { 
     route(handle, pathname, response, postData); 
    }); 

現在我的控制檯使用system.log數據實時更新,但我的瀏覽器超時出現「沒有數據收到錯誤」。

我已經嘗試調整上面的代碼來判斷哪裏出了問題,並且我可以告訴節點告訴我var數據爲空,因此它沒有向var postData添加任何內容。這對我沒有意義,因爲console.log("TAIL READING: " + data)在我的終端窗口中給出了spawn('tail', ['-f', '/var/log/system.log'])的結果。很明顯,var數據不是null。

編輯: Here's a pastebin link to my server.js code

+0

你能顯示整個代碼嗎?我的代碼片段中沒有看到任何錯誤? – Raynos 2011-06-16 18:16:09

+0

Raynos,我的所有代碼都分散在多個文件中。你只是想要我的server.js代碼?這些片段來自server.js – somas1 2011-06-16 18:18:29

+0

@ somas1你不應該有兩個'end'聽衆,也不應該有兩個呼叫'路線' – Raynos 2011-06-16 18:28:50

回答

2

尾-f將不會觸發結束回調,所以你永遠不會響應用戶。

+0

這很有趣。我會看看我從那個代碼中得出的教程,看看它是如何處理的。 – somas1 2011-06-16 18:31:35