【发布时间】:2014-07-07 07:32:19
【问题描述】:
我对 Node.js / Express 很陌生,我将它用作 AngularJS 应用程序的后端。我在 StackOverflow 上查看了有关我的问题的一些帮助,但我似乎无法弄清楚如何将建议移植到我的代码中。
我的应用程序如下:
- 一个长时间运行的 Scala 进程会定期发送我的 Node.js 应用程序日志消息。它通过发布到 HTTP API 来做到这一点
- 收到帖子后,我的应用程序将日志消息写入 MongoDB
- 然后将日志消息实时发送到 Angular 客户端。
我在使用 Node 的模块时遇到问题,因为我不知道如何在 Express 控制器中引用套接字实例。
如您所见,在 server.js 中,socket.io 在那里被实例化。但是,我希望控制器本身 logs.js 能够使用 socket.io 实例发出。
如何在控制器中引用io?我不确定如何将 io 实例传递给控制器以便发出消息?
这里是一些节点代码:
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)
};
【问题讨论】:
-
对于这个模式,我混合使用了 socket.io 和 Node.js Events。检查this anwser。
标签: javascript node.js angularjs express socket.io