javascript - 无法将变量名称从一个 Node 模块发送到另一个 Node 模块,以将其用作使用 socket.io 的聊天应用程序的房间名称

标签 javascript node.js web socket.io backend

我能够从用户那里获取房间名称,但当我在另一个文件中使用 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/

相关文章:

javascript - Chrome 检查器控制台不适用于版本 54.0.2840.99

php - 使用 node-mysql 返回一个列(如 PDO 中的 fetchColumn)

android - 当日志显示没有错误时,为什么我的推送通知没有出现在设备上?

javascript - 实现联盟系统最简单的方法是什么?

html - Forbidden 您无权访问/在此服务器上。此外,403 Forbidden

javascript - 尝试使用 CasperJS 跟踪 iframe 中的链接

for循环错误中的JavaScript匿名函数

javascript - 触发 AngularJS ng-model pipeline onBlur

node.js - 如何将 meteor 助手存储在 mongoDB 集合中,以及如何从 mongoDB 集合中呈现它

html - 如何设计 bootstrap 3.3.6 中的列?