如何在其他文件中导出/使用socket.io?

时间:2018-09-30 01:21:38

标签: javascript node.js sockets socket.io

我正在使用生成的NodeJS / ExpressJS / MongoDB / Socket.io后端(FullstackAcademy/fsg),并且想使用应用程序的Socket.io部分。

Socket.io有它自己的文件:

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

module.exports = function (server) {
    if (io) return io;
    io = socketio(server);
    io.on('connection', function () {
        // Now have access to socket, wowzers!
    });
    return io;
};

然后Socket.io已连接到Main.js中的服务器:

var chalk = require('chalk');
var startDb = require('./db');
var server = require('http').createServer();

var createApplication = function () {
    var app = require('./app');
    server.on('request', app); // Attach the Express application.
    require('./io')(server);   // Attach socket.io.
};

var startServer = function () {
    var PORT = process.env.PORT || 1337;
    server.listen(PORT, function () {
        console.log(chalk.blue('Server started on port', chalk.magenta(PORT)));
    });
};

startDb.then(createApplication).then(startServer).catch(function (err) {
    console.error(chalk.red(err.stack));
    process.kill(1);
});

问题是我想访问我的路由文件中的Socket.io功能,但没有任何运气。例如,当有人调用/ api / users / testing端点时,我有这个,目前不起作用:

router.get('/testing' , function(req, res, next) {
    const io = require('../../../io')(); // from Socket.io file
    io.on('connection', function (socket) {
        console.log('Emitting...');
        socket.emit('new user added', { userData: 'some data here' });
    });
});

Emitting...行永远不会注销,socket.emit永远不会触发。我认为这是因为从未io.on('connection',...)被调用。

有人可以告诉我如何通过此设置在其他文件中使用socket.io吗?

0 个答案:

没有答案