Node.js 从导出的模块发出触发器套接字.emit
我试图按照Patrick Roberts在本页上给出的说明进行操作: 在我的consumer.js中,当我调用socket.emit('message')时,返回了一个错误: “无法读取null的属性'emit'” 为什么我不能使用emit 这是我的密码: io.js文件(在中间件目录中) 在app.js中,我要求io文件包含:Node.js 从导出的模块发出触发器套接字.emit,node.js,socket.io,Node.js,Socket.io,我试图按照Patrick Roberts在本页上给出的说明进行操作: 在我的consumer.js中,当我调用socket.emit('message')时,返回了一个错误: “无法读取null的属性'emit'” 为什么我不能使用emit 这是我的密码: io.js文件(在中间件目录中) 在app.js中,我要求io文件包含: var io = require('./middleware/io').initialize(server); 在我的consumer.js中,我有以下内容: va
var io = require('./middleware/io').initialize(server);
在我的consumer.js中,我有以下内容:
var socket = require('../middleware/io').io();
然后在我调用的函数中:
socket.emit('message')
io.js文件中的发射正在工作——我正试图在consumer.js中使用的发射没有工作。这行代码:
var io = require('./middleware/io').initialize(server);
加载模块,调用模块上的.initialize(server)
方法,然后将.initialize(server)
中的返回值分配给io
变量。但是,您的.initialize()
方法不会返回任何内容,因此,io
变量将是未定义的
您可以修复将返回值添加到.initialize()
方法的问题:
exports.initialize = function(server) {
io = socketIO(server);
io.on('connection', (socket) => {
console.log('user connected')
socket.emit('newMessage');
socket.on('hello', (msg) => {
console.log('message: ' + msg);
});
socket.on('disconnect', () => {
console.log('user disconnected');
});
});
// return the socket.io instance so caller can use it
return io;
};
或者,您也可以更改以下内容:
var io = require('./middleware/io').initialize(server);
为此:
var ioModule = require('./middleware/io');
ioModule.initialize(server);
var io = ioModule.io();
您已将WritenCode添加到上述文件中的Post代码。谢谢,我实现了此代码,但是当我从consumer.js中调用:socket.emit('newMessage')时,我收到一个无法读取的属性'emit'的错误null@dwax-我只能在看到您正在尝试的确切代码时提供帮助(您可以使用“编辑”@dwax-您可能对io
和socket
的值感到困惑。他们不一样。谢谢你的帮助。我将代码上载到以下公共git repo:我试图做的是,当用户点击GET:/user路由时,我们会向所有客户端发出一个套接字事件。@dwax-没有多少人会通过存储库查找您遇到的问题。为了提高您获得帮助的机会并遵守此处的网站指南,您应该浓缩导致问题的代码,准确解释问题所在,并将其添加到您的问题中。
var ioModule = require('./middleware/io');
ioModule.initialize(server);
var io = ioModule.io();