1

ファイルの内容が変更された場合に、テキスト ファイルの内容を表示する 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');

残念ながら、空白のページしか表示されません。私は何を間違っていますか...?

4

2 に答える 2

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');
于 2012-10-11T07:44:46.173 に答える
0

ファイルを変更したプロセスは、書き込みモードで開いてから再書き込みすることで変更された可能性が非常に高くなります。その場合、他のプロセスがファイルを開いた直後に通知が届きます。この時点では、まだ書き込まれていないため、ファイルは空になります。

変更通知を受け取るたびにトリガーされるタイムアウトを設定し(つまり、タイムアウトの保留中に通知を受け取るたびに、タイムアウトをクリアして新しいタイムアウトを開始する)、タイムアウトが完了したときにのみファイルを読み取るのがおそらく最善です。

于 2012-10-11T06:43:09.463 に答える