mou*_*ree 6 javascript node.js express socket.io angularjs
我是Node.js/Express的新手,我将它用作AngularJS应用程序的后端.我已经遍布StackOverflow寻求一些关于我的问题的帮助,但我似乎无法弄清楚如何将建议移植到我的代码中.
我的申请表如下:
我遇到Node的模块问题,因为我无法弄清楚如何引用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;
Run Code Online (Sandbox Code Playgroud)
routes.js
var logs = require('./controllers/logs'),
middleware = require('./middleware');
module.exports = function(app) {
app.route('/logs')
.post(logs.create);
}
Run Code Online (Sandbox Code Playgroud)
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)
};
Run Code Online (Sandbox Code Playgroud)
您可以使用基于标准JS闭包的模式.主导出logs.js不是控制器函数本身,而是一个工厂函数,它将接受所有需要的依赖项,并创建控制器:
exports.create = function(socket) {
return function(req, res) {
// write body of api request to mongodb
socket.emit();
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当你想要使用它时:
app.route('/logs').post(logs.create(socket));
Run Code Online (Sandbox Code Playgroud)
由于您在单独的包中设置路由,因此必须使用相同的模式routes.js- routes应该接收要用作参数的套接字.
如果您想稍后使用DI处理这些内容,或者使用模拟"套接字"测试控制器,则此模式很有效.
| 归档时间: |
|
| 查看次数: |
4273 次 |
| 最近记录: |