Как экспортировать / использовать socket.io в других файлах? - PullRequest
0 голосов
/ 30 сентября 2018

Я использую сгенерированный бэкэнд 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 в других моих файлах с этой настройкой?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...