簡體   English   中英

Node.js架構和應用程序結構

[英]Node.js architecture and app structure

我一直在用socket.io構建一個簡單的基於Node / Express的聊天客戶端,在添加依賴項的導入方式與使用閉包將依賴項傳遞給組件之間有些困惑。

該應用的結構如下:

  • index.js
  • server / server.js(創建快速實例)
  • 服務器/控制器/(包含需要socketIO客戶端的控制器)
  • server / store.js(創建redis實例)
  • server / websocket.js(創建socket.io實例/返回自定義API)

創建一個socketIO客戶端需要一個express.Server實例。 但是,我仍然需要Express Server的控制器中的socketIO客戶端API(發出/廣播更新)。 因此,套接字客戶端由index.js導出為承諾,該承諾在解析后將用於設置用於express的控制器。

問題:在哪里連接組件的好方法是什么?

  • 組件A需要組件B的一個實例。
  • 組件B中的方法將需要組件A的一個實例。(這里SocketIO需要一個Express的實例,但是我還需要Express所使用的控制器中的SocketIO客戶端)

實際代碼: https//github.com/vsr4493/chatbox

在Node.js生態系統中,沒有構造項目組件的首選方法,尤其是對於不同的業務案例。

我已經實現了一個類似的Web應用程序,該應用程序在快速控制器中需要socket.io實例,並且有一個相同的問題:“我應該如何在控制器中訪問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)
    }

})

您可以隨時保持代碼的清潔和簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM