2012-10-11 22 views
1

我試圖讓一個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'); 

不幸的是,它只是顯示一個空白頁。我究竟做錯了什麼...?

+0

[流星](http://meteor.com/)在默認情況下做到這一點。你可能想看看它。 –

回答

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

完美無瑕,謝謝! – Sosumi

+0

沒問題,很高興我有幫助。 –

+0

@傑克格林希爾想知道你做了什麼不同,以及如何「res」工作(超出範圍)? – vinayr

0

很可能無論通過在寫入模式下打開文件還是改寫它,文件都會改變文件。當發生這種情況時,您會在其他進程打開文件後立即收到通知,此時它將爲空,因爲它尚未寫入。

這也可能是最好設置這些語句觸發每次你得到變更通知時間超時(即每次你收到此通知的時間而超時之前,您清除超時,並開始一個新的)和只讀文件時,超時完成。

相關問題