我正在使用生成的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吗?