你好,
我有一个套接字应用程序,其文件结构在app. js中定义如下:
require("../chat/variables");
require("../chat/functions");
require("../chat/connect");
app.get('/', function (req, res, next) {
res.sendFile(__dirname + '/index.html');
});
httpServer.listen(port, () => {
console.log(`Socket.IO server running`);
});
变量文件如下所示:
// server
app = require("express")();
httpServer = require("https").createServer({},app);
io = require("socket.io")(httpServer, { //socket server path
path: "/"
});
函数文件是这样的:
makesession = function(vdata) { //store user data for this session
if(socket) {
socket.userid = vdata.userid;
socket.username = vdata.name;
}
});
为每个用户执行连接的文件如下所示:
io.on('connection', (socket) => { //user connects to socket
memberdata().then(v => {
makesession(v);
});
});
但是我在函数文件中得到一个错误,说套接字没有定义。为什么会这样?我认为使用if条件已经足够了,所以它只在套接字定义后触发。
谢谢你。
1条答案
按热度按时间von4xj4u1#
尝试将socket作为参数添加到makesession,如下所示:
在你的原始代码中,
socket
并没有在makesession
中定义,因为socket在回调中是一个局部(而不是全局)变量,Javascript使用的是词法作用域,而不是动态作用域,所以回调中的变量在makeSession中是不可见的。