我能够从用户那里获取房间名称,但当我在另一个文件中使用 module.exports
来检索它时,它显示 undefined 。这可能是因为它是异步的。
//roomcheck.js
var nsp = io.of("/gameroom");
nsp.on('connection', (socket) => {
socket.on('check', (data) => {
if (rm.includes(data)) {
roomname = data;
console.log(roomname);
console.log("Room exist!!!");
socket.emit('success', 'room already made');
});
module.exports=roomname;
//userpage.js
var r=require('roomcheck.js');
console.log(r.roomname);
预期 - 用户输入的房间名称。
我的输出 - 未定义
最佳答案
- 首先,你是对的,因为它是异步的
- 其次,您将 module.exports 本身设置为房间名称,这意味着 module.exports 不是一个对象,而是字符串本身
所以基本上 r 是 module.exports
如果我是你,我会创建 module.exports 和具有 onRoomCheck 函数的对象,我可以将回调传递给该函数
示例代码:
//roomcheck.js
var roomCheckCallback = ()=>{};
var nsp = io.of("/gameroom");
nsp.on('connection', (socket) => {
socket.on('check', (data) => {
if (rm.includes(data)) {
roomname = data;
console.log(roomname);
roomCheckCallback({roomname:roomname,exists:true});
console.log("Room exist!!!");
socket.emit('success', 'room already made');
} else { roomCheckCallback({roomname:null,exists:false}); }
});
module.exports = {}
module.exports.onRoomCheck = function(callback){
roomCheckCallBack = callback;
}
//userpage.js
var r=require('roomcheck.js');
r.onRoomCheck( (room)=> { console.log(room.roomname) } );
关于javascript - 无法将变量名称从一个 Node 模块发送到另一个 Node 模块,以将其用作使用 socket.io 的聊天应用程序的房间名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56749781/