2015-09-15 90 views
0

我正在使用MEAN.JS框架(MongoDBExpressJSAngularJSNodeJS)構建應用程序。使用Socket.IO;如果用戶連接或不連接,我將保留在MongoDB用戶模式中。NodeJS:服務器啓動時執行的代碼

//Connect 
io.on('connection', function(socket){ 
    connectToChat(true); 

    //Disconnect 
    socket.on('disconnect', function(){ 
     connectToChat(false); 
    }); 

    function connectToChat(isConnect){ 
     var user = socket.request.user; 
     var numberOfSocketClients = Object.keys(io.sockets.adapter.rooms[user.id] || {}).length; 
     if(isConnect || (!isConnect && numberOfSocketClients===0)) { 
      User.findOne({_id: mongoose.Types.ObjectId(user.id)}) 
       .exec(function (err, doc) { 
        if(!err && doc){ 
         doc.isConnected = isConnect; 
         doc.save(callback); 
        } 
       }); 
     } 

}); 

作品在所有情況下當服務器停止 ...當服務器重新啓動所有用戶默認情況下應不連接但也有保存在MongoDB的用戶架構的一些連接的用戶,除了良好

歐凱,據我所知,停止服務器是因爲我使用Forever一個罕見的情況......但是,有沒有好的方法來執行在ExpressJS代碼重新啓動服務器時,只有當?我試圖在server.js文件中執行代碼,但所有會話都執行此代碼,但這不是我想要的。

非常感謝!

回答

1

收聽ExpressJs收聽活動。一旦服務器準備好接受連接,它將在啓動時被觸發。

app.on('listening', function() { 
    // server ready to accept connections here 
}); 

其中應用程序是您的快遞服務器。

+0

謝謝,我現在要試試這個! –

+0

不要爲我工作...你能給我一些文檔參考嗎?我沒有找到任何關於它的文檔...謝謝! –

+0

@AralRoca - 這是Node.js文檔。 Express創建節點js服務器,以便所有節點事件也被觸發:https://nodejs.org/docs/v0.6.13/api/net.html#net_event_listening –

相關問題