在express.js项目中,我试图从nodeJS服务器向客户端发送数据。
到达页面后,终端(我从中启动服务器)指出用户已通过套接字连接。但是,在运行包含套接字发出功能的函数时,不会发生任何事情。
只有在重新加载网页时,发出的数据才会显示在html和终端控制台日志中。
下面是在app.js
中的Callback函数中触发套接字的代码foo(function(fooCallback) {
console.log('Callback triggered');
io.on('connection', function(socket) {
console.log('about to send data via socket');
io.sockets.emit('person', { 'name': 'Jack Smith' });
});
});
global.js - (在jquery和socket脚本之后加载客户端js)
var socket = io.connect();
socket.on('person', function(socket){
console.log('client recieved something from socket');
var personName = socket.name;
$('#person').html(personName);
});
为什么仅在重新加载网页时才会发出数据,而不是自动生成?
答案 0 :(得分:0)
在这段代码中:
io.on('connection', function(socket) {
console.log('about to send data via socket');
io.sockets.emit('person', { 'name': 'Jack Smith' });
});
您说您只想在io.sockets.emit('person', { 'name': 'Jack Smith' });
变量首次连接时运行io
。尝试将其更改为:
io.on('connection', function(socket) {
console.log('about to send data via socket');
});
io.sockets.emit('person', { 'name': 'Jack Smith' });
答案 1 :(得分:0)
您的问题是,服务器传播连接消息的时间太晚,以至于应用无法在第一次加载时检测到该消息。我不确定你为什么要使用这样的foo回调函数。您的io.on连接逻辑应该直接进入主js文件。然而,可能的方法是初始化var io = io();在那个foo函数里面