Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当文件内容更改时,使用node.js将更新的内容发送给用户_Javascript_Node.js - Fatal编程技术网

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

Javascript 当文件内容更改时,使用node.js将更新的内容发送给用户,javascript,node.js,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/{userna

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

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

很可能是任何进程都会以写模式打开文件,然后重新编写,从而更改文件。当这种情况发生时,您将在另一个进程打开该文件后立即收到通知,此时该文件将为空,因为它尚未写入

最好设置一个每次收到更改通知时都会触发的超时,即每次收到暂停超时的通知时,清除超时并启动一个新的超时,并且仅在超时完成时读取文件。

如何:

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

默认情况下不会执行此操作。你可能想看一看。没问题,很高兴我能提供帮助。@JackGreenhill想知道你做了哪些不同的事情,以及如何才能超出范围?