Node.js 用socket.io实现撇号cms

Node.js 用socket.io实现撇号cms,node.js,socket.io,apostrophe-cms,Node.js,Socket.io,Apostrophe Cms,我试图在撇号CMS2.x上实现Socket.io 我不知道如何从express apos获取服务器对象 如果我执行以下操作,我将必须在新端口上创建一个新服务器,并且我需要在与express app相同的端口上使用套接字 lib/modules/撇号socket/index.js module.exports = { construct: function(self, options) { var server = require('http').Server(self.apos.ap

我试图在撇号CMS2.x上实现Socket.io

我不知道如何从express apos获取服务器对象

如果我执行以下操作,我将必须在新端口上创建一个新服务器,并且我需要在与express app相同的端口上使用套接字

lib/modules/撇号socket/index.js

module.exports = {
  construct: function(self, options) {
    var server = require('http').Server(self.apos.app);
    var io = require('socket.io')(server);

    io.of('/api/v1/io/notifications').on('connection', function (socket) {
      console.log("New connection", socket.id);
      socket.on('notification', function (data) {
        console.log("this is a notification ",data);
      });
    });

  }
};

看一看撇号express模块,它设置了express应用程序。服务器对象可以作为apos.modules['撇号-express'].server访问。这是在启动过程中很晚才建立的,因为一旦建立了,连接就可以开始进入。访问它的一个好时机是在app.js中的afterListen:function(err){…}回调中。请注意,如果存在err,则它不会成功侦听,因为您提供了afterListen功能,所以您需要负责退出

因此,您的代码可能如下所示:

// in app.js
afterListen: function(err) {
  if (err) {
    console.error(err);
    process.exit(1);
  }
  var io = require('socket.io')(apos.modules['apostrophe-express'].server);
}
我们没有为
afterListen
发出承诺事件是有问题的,因此您必须在
app.js
中使用回调来执行此操作,而不是在您自己的模块中添加事件侦听器,这样可以更好地构造代码。但是,您可以从
afterListen
调用自己模块中的一个方法。我们将在初始化的这一点上查看添加承诺事件