我有一个nodejs应用程序,我想在其中监视网页上的每个传入请求。我试图使用socket.io来做到这一点。我的app.js文件中有以下内容
var express = require('express');
var http = require('http');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
server.listen(3000);
var usageLogger = function(req, res, next) {
console.log("GOT REQUEST !");
var os = require("os"),
cpus = os.cpus();
var url = "URL: " + req.url + "\n" ;
var urlTime = "Time: " + new Date().getTime() + "\n" ;
var liveMessage = "<div><p><b>URL:</b> "+ req.url + "</p><p><b>Time: </b> " + new Date().getTime() + "</p></div>"
io.on('connection', function(socket){
socket.emit('news', liveMessage);
});
}
app.use(usageLogger);
在我的footer.jade文件中,我有以下内容:
.container
.footer
hr(style='margin: 30px 0 10px 0;')
p ©
a(href='#') Author
| 2014
script(src='/javascripts/bootstrap.min.js')
script(src="/socket.io/socket.io.js")
script(type='text/javascript')
|var socket = io();
|socket.on('news', function(msg){
|$('#messages').append(msg);
|});
block footer
当我访问任何页面时,我只会在刷新站点的索引页面时收到广播消息。例如,当我第一次访问localhost:300时,我可以看到以下内容:
网址:/ 时间:0909234234
但是,如果我打开一个新标签并访问localhost:3000 / example,我必须刷新第一页才能获得以下视图
网址:/ 时间:0909234234
网址:/示例 时间:0909234239
我很难理解为什么在不刷新页面的情况下不会自动更新。任何帮助我非常感谢。
答案 0 :(得分:1)
在您的代码中,对于每个即将发出的请求,当套接字连接时,您向该套接字发出news
。你想要的是,当一个请求进来时,向所有连接的套接字发出news
。
你可以这样做:
var usageLogger = function(req, res, next) {
//do what you want
...
io.sockets.emit('news', liveMessage);
}