gpt4 book ai didi

node.js - 从导出的模块触发socket.emit

转载 作者:太空宇宙 更新时间:2023-11-03 21:55:13 28 4
gpt4 key购买 nike

我正在尝试按照帕特里克·罗伯茨在此页面上给出的说明进行操作:

How can i export socket.io into other modules in nodejs?

在我的consumer.js中,当我调用socket.emit('message')时,我收到一个错误:“无法读取 null 的属性‘emit’”

为什么我无法使用emit?

这是我的代码:io.js 文件(在中间件目录中)

var socketIO = require('socket.io');
var io = null;

exports.io = function() {
return io;
};

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');
});

});
};

在 app.js 中,我需要 io 文件:

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变量将是 undefined .

您可以修复我向 .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();

关于node.js - 从导出的模块触发socket.emit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42930343/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com