NodeJS Socket.io 从节点控制器发出,我做得对吗?

toe95027  于 2022-12-12  发布在  Node.js
关注(0)|答案(1)|浏览(85)

我是nodej的新手,现在需要将www.example.com集成socket.io到应用程序中。
基本上这是一个电子商务应用程序,我需要在管理屏幕上显示订单自动,所以我使用socket.io发出最新订单的json。
经过更多的搜索,我最终集成了一个简单的解决方案,即全局声明io变量并在控制器中使用它。
一个或多个客户端将连接到具有特定ID的套接字,我将向该事件发出如下输出。

服务器.js

var http = require('http').Server(app)
var io = require('socket.io')(http)
global._io = io

控制器.js

exports.socketServer = (req,res) => {
    global._io.emit('groupid', "json_data")
})

因此,当从这个模块插入新订单时,我会将json发送给与套接字连接的用户。
这是否足够公平!?使用上述代码的最佳实践是什么,所有的缺点是什么。
我看到一些帖子声明要传递io作为属性,我不能理解,所以我真的很感激,如果有人可以解释我如何通过它。
谢谢

  • 维杰
ggazkfy8

ggazkfy81#

通常不建议使用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")
})

相关问题