2017-08-24 44 views
1

我一直在使用socket.io构建一个简单的基于Node/Express的聊天客户端,并且在添加依赖项与使用闭包将依赖项传递给组件的导入方式之间存在一些混淆。Node.js体系结构和应用程序结构

这里是应用程序是如何构成的:

  • index.js
  • 服务器/ server.js(创建Express实例)
  • 服务器/控制器/(包含需要socketIO客户端控制器)
  • 服务器/ store.js(创建Redis的实例)
  • 服务器/ websocket.js(创建socket.io实例/返回一个自定义的API)

创建一个socketIO客户端需要一个express.Server实例。 但是,我仍然需要在Express服务器的控制器中使用socketIO客户端API(发送/广播更新)。 因此,套接字客户端由index.js作为承诺输出,在解析时用于设置控制器以进行快速处理。

问: 什么是挂钩组件的好办法,其中

  • 组件A需要组件B.
  • 组分B中的一些方法的一个实例,将需要组件A. 的一个实例(这里SocketIO需要Express实例,但我还需要一个正在使用的快递在控制器SocketIO客户端)

的实际代码: https://github.com/vsr4493/chatbox

+1

我投票结束这个问题作为题外话题,因为它是关于代码审查。 –

回答

0

在Node.js生态系统中,不存在构建项目组件的首选方法,特别是对于不同的业务案例。

我已经实现了一个类似的Web应用程序,需要在快递控制器中使用socket.io实例,并且有同样的问题:'我应该如何在控制器中访问socket对象?'。

我所做的是用socket事件替换我的express控制器。因此,您的代码库可以变成以下代码:

io.on('connection', function(socket){ 

    socket.on('join', function(user) { 
     userStore.join(user) 
     emitOnlineCount() 
    }) 

    function emitOnlineCount() { 
     io.sockets.emit("onlines", userStore.getUsers().length) 
    } 

}) 

保持您的代码清洁和简单,在您的手中。