我正在研究两个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数据不为空。
答案 0 :(得分:2)
tail -f不会触发结束回调,所以你永远不会回复用户。