文件内容更改时,使用node.js将更新的内容发送给用户

时间:2012-10-11 05:40:27

标签: javascript node.js

我正在尝试获取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');

不幸的是,它只显示一个空白页面。我做错了什么......?

2 个答案:

答案 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');