Я довольно новичок в Node.js/Express, и я использую его как бэкэнд для приложения AngularJS. Я просмотрел StackOverflow для некоторой помощи по моей проблеме, но я не могу понять, как переносить предложения в мой код.Socket.io emit from Express контроллеры
Мое приложение работает следующим образом:
- Долгий работает процесс Scala периодически отправляет свои сообщения в журнале приложения Node.js. Он делает это, отправляя HTTP API
- Когда сообщение получено, мое приложение записывает сообщение журнала в MongoDB
- Сообщения журнала затем отправляются в режиме реального времени для Углового клиента.
У меня проблема с модулями узла, так как я не могу понять, как обращаться к экземпляру сокета в контроллере Express.
Как вы можете видеть, в server.js, здесь создается экземпляр socket.io. Однако я хотел бы, чтобы сам контроллер logs.js мог испускать, используя экземпляр socket.io.
Как я могу обращаться к io в контроллере? Я не уверен, как передать экземпляр io контроллеру, чтобы я мог передавать сообщения?
Вот некоторые из кода Node:
server.js
var app = express(),
server = require('http').createServer(app),
io = require('socket.io').listen(server);
require('./lib/config/express')(app);
require('./lib/routes')(app);
server.listen(config.port, config.ip, function() {
console.log('Express server listening on %s:%d, in %s mode', config.ip, config.port, app.get('env'));
});
io.set('log level', 1); // reduce logging
io.sockets.on('connection', function(socket) {
console.log('socket connected');
socket.emit('message', {
message: 'You are connected to the backend through the socket!'
});
});
exports = module.exports = app;
routes.js
var logs = require('./controllers/logs'),
middleware = require('./middleware');
module.exports = function(app) {
app.route('/logs')
.post(logs.create);
}
logs.js
exports.create = function(req, res) {
// write body of api request to mongodb (this is fine)
// emit log message to angular with socket.io (how do i refer to the io instance in server.js)
};
Спасибо, ты мой герой! – mousetree
Как вы определяете socket в routes.js, чтобы использовать его в маршруте, как показано выше? –
@CoreyQuillen: вот пример моих маршрутов. Js - https://gist.github.com/mousetree/7585c9d108cfc006a582 – mousetree