我是Nodejs的新手,现在需要将socket.io集成到应用程序中。
基本上是一个电子商务应用,我需要在管理屏幕中自动显示订单,因此我正在使用socket.io发出最新订单的json。
经过更多搜索,我终于集成了一个简单的解决方案,该解决方案全局声明io变量并在控制器内部使用它。
一个或多个客户端将连接到具有特定ID的套接字,并且我向该事件发出如下输出。
server.js
var http = require('http').Server(app)
var io = require('socket.io')(http)
global._io = io
controller.js
exports.socketServer = (req,res) => {
global._io.emit('groupid', "json_data")
})
因此,当从此模块插入新订单时,我会将json发送给与套接字连接的用户。
足够公平了吗??使用上述代码的最佳实践是什么,还有什么弊端。
而且我看到很少有文章指出将io作为属性传递给我,我无法理解,因此,如果有人可以向我解释如何传递它,我将非常感激。
谢谢
-维杰
答案 0 :(得分:1)
通常不建议使用global
对象,因为它可能引起命名冲突。例如,您require
可能还设置了global._io
的模块,将您的_io
发送到垃圾收集器。
但是,如果您使用的模块数量较少,那么对于小型应用程序来说,这是一个完美可行的解决方案。
在模块之间共享变量的推荐方法是将其放入exports
对象中:
server.js
var http = require('http').Server(app)
var io = require('socket.io')(http)
exports.io = io;
controller.js
exports.socketServer = (req,res) => {
require("server.js").io.emit('groupid', "json_data")
})