Node.js正在观看文件

时间:2016-01-26 15:14:17

标签: node.js

我想在我正在观看的文件发生变化时打印一条消息。我能够使用console.log来做到这一点,但我无法弄清楚如何使用response.write或类似函数来做到这一点。

var counter = 0;
const
    http = require('http'),
    fs = require('fs'),
    filename = process.argv[2];

var server = http.createServer(function(request, response) {
    response.writeHead(200, { 'Content-Type' : 'text/plain' });
    counter = counter + 1;
    response.end('Hello client ' + Math.round(counter / 2));
});

server.on('listening', function() {
    var watcher = fs.watch(filename, function(){
    console.log('The file ' + filename + ' has just changed.');
    });
});

server.listen(8080);

另外,我之所以这样做Math.round(counter / 2),是因为每次连接客户端时计数器都会增加2。我想知道为什么会发生这种情况,以及是否有更好的技术来解决这个问题。

3 个答案:

答案 0 :(得分:1)

为了能够使用response.write来完成它,它需要成为服务器请求处理函数的一部分。

文件事件可以独立于发送请求的人发生,因此它的处理与处理请求的处理无关。因此,您没有相关的请求。

如果要跟踪所有文件更改事件,然后在发送请求时将其显示给用户,请考虑在处理函数之外存储有关对象更改的信息,以及何时发生请求,读取该对象以查看是否有更改并根据它向用户写入响应。

答案 1 :(得分:1)

如果您想通知最终用户该文件已更改,例如在Web浏览器中,则您有许多选项,包括轮询服务器或使用websockets。

我建议你看一下Server Sent Events

它易于实现,并且有npm模块可以使它更容易在node.js.例如npm sse

答案 2 :(得分:0)

您可以尝试节点模块chokidar     https://github.com/paulmillr/chokidar 它是用于文件观看的gread模块