I have express/nodejs api. I am adding socket.io feature to it. Currently all of my routes are in separate folders and I include them in server.js file and use them as app.use() function.
In server.js file, I also start the express server by listening to a particular port such as 3000 as below.
let server = app.listen(3000);
According to all google searches what I found is that I need to pass server variable to initialize socket.io like following.
let io = require('socket.io')(server);
Now the question is that since it needs this variable then how can I use socket.io in my routes files which are in different folder to emit and receive events from client?
UPDATE
in server.js file
let route = require('./routes/route');
let app = express();
let server = app.listen(3000);
console.log('Listening to port');
let io = require('socket.io')(server);
app.use('/api/1.0/events', route(io));
in route.js file
let express = require('express');
module.exports = (io) => {
console.log('IO: ', io);
};
UPDATE 2
server.js file
let express = require('express');
let events = require('./routes/events');
let app = express();
let server = app.listen(3000);
let io = require('socket.io')(server);
app.use(function(request, response, next) {
request.io = io;
next();
});
app.use('/events', events);
events.js file
let express = require('express');
let Events = require('../models/events');
apiRoutes.post('/new', function(request, response) {
let newEvent = new Events(request.body);
newEvent.save((error, result) => {
if (error) {
response.json(error);
} else {
// console.log('ELSE');
// request.io.on('connect', socket => {
// console.log('LISTENING TO SOCKET...');
request.io.on('EventCreated', data => {
console.log('DATA ON Server: ', data);
});
// });
response.json({
success: true,
message: 'New event created'
});
}
});
});
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…