Node.js 从导出的模块发出触发器套接字.emit

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

我试图按照Patrick Roberts在本页上给出的说明进行操作:

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

为什么我不能使用emit

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

在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
变量将是
未定义的

您可以修复将返回值添加到
.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();