【问题标题】:Express 4 ans Socket.io - Access app.io in modulesExpress 4 ans Socket.io - 在模块中访问 app.io
【发布时间】:2023-03-16 05:53:02
【问题描述】:

我正在使用 socket.io 和 Express 4,我在将 io 传递给其他模块时遇到问题。

在我的 app.js 中,我将 io 附加到应用程序,如下所示:

var express = require('express');
var socket_io = require('socket.io');
var app = express();
app.io = socket_io();

module.exports = app;

我的服务器定义在 ./bin/www 而不是 app.js 中,io 像这样附加到服务器:

./bin/www:

var app = require('../app');
var http = require('http');

server.listen(3000);
app.io.attach(server);

在我的模块中,我尝试导入app 以访问app.io,但我可能遇到循环依赖问题,因为app 是一个空对象。

module.js

var app = require('../app');

console.log(app)
--> {}

我尝试了thisthis 问题中建议的解决方案,但它们不起作用。我怀疑我在 ./bin/www 中创建服务器的事实可能是原因。

如何在其他模块中访问app

【问题讨论】:

    标签: javascript node.js express socket.io


    【解决方案1】:

    你可以试试这个答案:Using socket.io in Express 4 and express-generator's /bin/www

    app.js

    // Socket.io
    var io = socket_io();
    app.io = io;
    
    var routes = require('./routes/index')(io);
    

    index.js

    module.exports = function(io) {
        var app = require('express');
        var router = app.Router();
    
        io.on('connection', function(socket) { 
            (...) 
        });
    
        return router;
    }
    

    也尽量不要从模块中要求app.js

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-15
      • 2015-02-28
      • 1970-01-01
      • 2014-04-02
      • 2018-06-17
      • 2017-11-27
      • 1970-01-01
      • 2012-05-22
      相关资源
      最近更新 更多