node.js获取新的数据而不刷新

我正在写一个应用程序,服务器会在文件内容发生变化时自动发送新的数据,浏览器应该显示它。 但是,我需要每次使用“刷新”来找出新的数据是什么。 这里是客户端代码:

<script> var socket = io.connect('http://192.168.1.91:8070'); socket.on('news', function (data) { console.log(data); document.forms['test form'].elements["txtStatus"].value = data; }); </script> 

这里是服务器代码:

 var http = require('http'); var io = require('/home/pi/node/lib/node_modules/socket.io'); var server; var fs = require('fs'); server = http.createServer(function(req, res){ res.writeHead(200, {'Content-Type': 'text/html'}); res.write('My first node app.'); res.end(); }), server.listen(8070); var io = io.listen(server); var prev_text; var text = fs.readFileSync('./current_temp','utf8'); io.sockets.on('connection', function (socket) { socket.emit('news', text); fs.watchFile('./current_temp', function (curr, prev) { text = fs.readFileSync('./current_temp','utf8'); if(prev_text != text){ prev_text = text; socket.emit('news', text); console.log("text is :"+text); } }); } ); 

它是被磨损的,因为有时它可以工作,但是大多数时候我不是在testing它。 我不知道是什么使它工作。 我也希望watchFile kindda把这个程序放在一个循环中,一旦文件内容发生变化,我就可以发出这个循环。

还有其他任何意见,欢迎关于这个代码。 我是新来的sockets.io和node.js,因此可能不会做正确的事情…先谢谢你的答案。

问题是,我怎样才能使浏览器更新数据而不刷新客户端。

你的方法不好,但是这不是一个问题,因为你说你是socket.io的新手。 您需要刷新页面,因为您没有以有意义的方式使用socket.io的默认事件。 刷新页面时,客户端和服务器之间会build立一个新的连接,并在那里触发“新闻”事件。 像这样做:

 var prev_text; var text = fs.readFileSync('./current_temp','utf8'); fs.watchFile('./current_temp', function (curr, prev) { text = fs.readFileSync('./current_temp','utf8'); if(prev_text != text){ prev_text = text; io.sockets.emit('news', text); console.log("text is :"+text); } }); io.sockets.on('connection', function (socket) { socket.emit('news', text); }); 

io.sockets.emit是向所有连接的客户端发送数据的默认事件,您可以在io.sockets.on('connection')范围外使用它

我想你可以通过chokidar.js检测文件的变化。 每次文件更改时,都会触发一个事件,您可以在这里触发“新闻”事件。 你也可以用这个来检测它:

 fs.watch("c:\\sim", { persistent: true }, function (event, fileName) { console.log("Event: " + event); io.sockets.emit('news', text); }); 

希望这个作品!