我想在我正在观看的文件发生变化时打印一条消息。我能够使用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。我想知道为什么会发生这种情况,以及是否有更好的技术来解决这个问题。
答案 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模块