我正在尝试获取node.js脚本,以便在文件内容发生变化时显示文本文件的内容。
这是我到目前为止所得到的:
var http = require('http');
var fs = require("fs");
http.createServer(function (req, res) {
fs.watch("/Users/{username}/Desktop/data.txt",function(event,file) {
fs.readFile('/Users/{username}/Desktop/data.txt', 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(data);
//^ this doesn't work, just returns a blank page
});
});
}).listen(1337, '0.0.0.0');
不幸的是,它只显示一个空白页面。我做错了什么......?
答案 0 :(得分:0)
任何进程都可能通过在写入模式下打开然后重写文件来改变文件。当发生这种情况时,您将在另一个进程打开文件后立即收到通知,此时它将为空,因为它尚未写入。
最好设置每次收到更改通知时触发的超时(即每次在超时挂起时收到通知,清除超时并启动新超时)并且仅在超时时读取文件完成。
答案 1 :(得分:0)
这个怎么样:
var http = require('http');
var fs = require("fs");
function dataHandler(data) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(data);
}
http.createServer(function (req, res) {
fs.watch("/Users/{username}/Desktop/data.txt",function(event,file) {
fs.readFile('/Users/{username}/Desktop/data.txt', 'utf8', function (err,data) {
if (err) {
return console.log(err);
}
dataHandler(data);
});
});
}).listen(1337, '0.0.0.0');