javascript - 无法将变量名称从一个节点模块发送到另一个节点模块以将其用作使用 socket.io 的聊天应用程序的房间名称
问题描述
我能够从用户那里获取房间名称,但是当我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
如果我是你,我会制作具有 onRoomCheck 函数的 module.exports 和对象,我可以将回调传递给
示例代码:
//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) } );
推荐阅读
- java - 使用 RXTX 部署一个独立的应用程序
- vba - 我想在事件过程中设置一个新记录表单字段的值
- flutter - 如何修复“无法快照构建脚本”
- visual-studio - 如何使用 Visual Studio 2019 为解决方案中的多个项目指定自定义代码分析规则集?
- apache - LAN连接到wamp主页,而不是www中的项目
- asp.net-mvc - WebActivatorEx 启动方法未运行
- apostrophe-cms - 在 ApostropheCMS 中将 JS 从 npm 模块推送到浏览器
- python - Google Bigquery 存储:读取 to_dataframe 时出现 DeadlineExceeded 错误
- spring - 未对 @Transactional 注解执行回滚
- python-3.x - 是否可以在不定义顺序或关键字之间的单词数的情况下使用基于空间规则的匹配?