无法理解node.js侦听器

时间:2011-06-16 18:09:22

标签: 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命令'tail',然后尝试将此数据添加到我的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数据为null所以它没有向var postData添加任何东西。这对我来说没有意义,因为console.log("TAIL READING: " + data)在我的终端窗口中给出了spawn('tail', ['-f', '/var/log/system.log'])的结果。显然var数据不为空。

修改 Here's a pastebin link to my server.js code

1 个答案:

答案 0 :(得分:2)

tail -f不会触发结束回调,所以你永远不会回复用户。