Javascript 将socket.io实例传递给JS对象构造函数
我阅读并尝试执行该解决方案,但是我尝试将我的Javascript 将socket.io实例传递给JS对象构造函数,javascript,node.js,sockets,module,socket.io,Javascript,Node.js,Sockets,Module,Socket.io,我阅读并尝试执行该解决方案,但是我尝试将我的io实例传递给对象构造函数,而不是类。我最初试图做一些像 //index.js const {CONNECTION, CREATE_ROOM} = require('./SignalTypes') const app = require('express')() const server = require('http').Server(app) const io = require('socket.io')(server) const Lobbie
io
实例传递给对象构造函数,而不是类。我最初试图做一些像
//index.js
const {CONNECTION, CREATE_ROOM} = require('./SignalTypes')
const app = require('express')()
const server = require('http').Server(app)
const io = require('socket.io')(server)
const Lobbies = require('./lobby')
let lobbies = new Lobbies(io)
io.of('/menu').on(CONNECTION, (socket) => {
console.log(`User connected to main menu`)
socket.on(CREATE_ROOM, () => {
const roomKey = lobbies.createLobby()
socket.emit(ROOM_CREATED, roomKey)
})
...
})
我的大厅文件看起来像
//lobby.js
const shortid = require('shortid')
function Lobbies(io) {
this.io = io;
this.lobbies = {}
}
Lobbies.prototype.createLobby = () => {
let roomKey = shortid.generate()
//create namespace for new lobby
const lobbyNamespace = this.io.of(`/${roomKey}`) // issue
this.lobbies[roomKey] = new Lobby(roomKey, lobbyNamespace)
return roomKey
}
//Lobby object constructor defined later
...
module.exports = Lobbies
但是,我不断遇到错误,它说,io
在行中未定义
//lobby.js
const lobbyNamespace = this.io.of(`/${roomKey}`)
//TypeError: Cannot read property 'of' of undefined
我想知道是否有一种方法可以将我的
io
对象传递给我的对象构造函数,而不必将其更改为ES6类或其他什么。有什么建议吗?当使用箭头函数语法时,您将丢失此参考。我不知道您为什么要使用旧的、难以理解的语法,但如果您想使用这种语法而不是类,您应该:
Lobbies.prototype.createLobby = function() {
let roomKey = shortid.generate()
//create namespace for new lobby
const lobbyNamespace = this.io.of(`/${roomKey}`) // issue
this.lobbies[roomKey] = new Lobby(roomKey, lobbyNamespace)
return roomKey
}