Node.js架构和应用程序结构

时间:2017-08-24 09:52:56

标签: javascript node.js express

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

以下是该应用的结构:

  • index.js
  • server / server.js(创建快递实例)
  • server / controllers /(包含需要socketIO客户端的控制器)
  • server / store.js(创建redis实例)
  • server / websocket.js(创建socket.io实例/返回自定义API)

创建socketIO客户端需要express.Server的实例。 但是,我仍然需要在快速服务器的控制器中使用socketIO客户端API(发出/广播更新)。 因此,套接字客户端由index.js导出为promise,在解析时,用于设置express的控制器。

问题: 什么是将组件连接起来的好方法

  • 组件A需要组件B的实例。
  • 组件B内的方法将需要组件A的实例。 (这里SocketIO需要一个Express实例,但我也需要Express中使用的控制器中的SocketIO客户端)

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

1 个答案:

答案 0 :(得分:0)

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

我在快速控制器中实现了一个需要socket.io实例的类似Web应用程序,并且遇到了同样的问题:“我应该如何访问控制器中的socket对象?”。

我所做的是用套接字事件替换我的快速控制器。所以,你的代码库可以变成这些:

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

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

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

})

让您的代码保持简洁明了。