2014-09-19 53 views
2

模塊化socket.io,比方說,我有一個app.js這樣架構在使Node.js應用的node.js

var express = require('express') 
var app = express(); 

var server = http.createServer(app); 

... 

module.exports = { 
    app:app, 
    server:server 
} 

也有/lib/sockets.js,其中socket.io的所有邏輯應該在它看起來像這樣:

var server = require('../app.js').server; 
var io = require("socket.io").listen(server); 

io.sockets.on('connection', function(socket) { 
    socket.on('event', function(msg) { 
    socket.emit('news', msg}); 
    }); 
}); 

module.exports = io; 

是否需要從server app.js這裏好的做法呢?如果不是,那麼更好的解決方案是什麼? thx

回答

7

嘗試讓你的sockets.js文件導出一個函數。然後需要app.js中的套接字文件並傳入任何相關的參數。

在你的lib/sockets.js:

module.exports = function(server){ 

    var io = require("socket.io").listen(server); 

    io.sockets.on('connection', function(socket) { 
     socket.on('event', function(msg) { 
      socket.emit('news', msg); 
     }); 
    }); 

    return io; 
}; 

而在你的app.js

var express = require("express"); 
var app = express(); 

var io = require("./lib/sockets")(app); 
+0

這個工程。很棒,thx!現在,如果我想在第三個模塊中調用「emit」,該怎麼辦?我可以以某種方式從這裏導出io對象以在另一個模塊中使用它嗎? – Hinrich 2014-09-19 20:41:41

+1

你會遵循與第三個模塊相同的模式。它會導出一個將io對象作爲參數的函數。然後在你的套接字文件中,你需要在第三個模塊中,並將io對象作爲參數傳遞給新的所需函數。 – aembke 2014-09-19 21:01:57