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