2015-09-15 49 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 –

相关问题