嗨,
我有一个套接字应用程序,在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条件就足够了,所以它只在定义了套接字之后才会触发。
谢谢。
尝试添加套接字作为makesession的参数,如下所示:
makesession = function(socket, 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(socket, v);
});
});
在原始代码中,socket
没有在makesession
中定义,因为套接字是回调中的局部(而不是全局)变量。Javascript使用词法作用域,而不是动态作用域,因此回调中的变量在makesession中不可见。