我必须在浏览器上显示node.js服务器端日志,所以我使用了socket.io和tail模块。 除了一个问题,代码工作正常。 问题是当我第一次访问页面时,它的显示在浏览器上显示正确的日志,但是当刷新页面然后日志出现两次然后再刷新页面然后它出现三次,依此类推。 这是我的代码
logs.ejs
<% script('/js/socket.io.js') -%>
<% script('/js/jquery.min.js') -%>
<script>
// creates socket on page load
$(function() {
var socket = null;
var streamer = null;
var socket = io.connect('http://localhost');
streamer = $('#streamer');
// outputs a new line to browser for each new line in file
socket.on('new-data', function(data) {
var newLine = $('<div>' + data.value + '</div>');
streamer.append(newLine);
});
});
</script>
<div id="streamer">
</div>
app.js
var app = express()
,server = require('http').Server(app)
,io = require('socket.io')(server)
server.listen(3000)
Tail = require('tail').Tail;
io.sockets.on('connection', function(socket) {
tail = new Tail("log.log"); // file to stream
tail.on('line', function(data) {
return io.sockets.emit('new-data', {
channel: 'stdout',
value: data
});
});
});
我不知道,但我认为它在页面刷新时创建了多个连接。