2011-12-31 2 views
0

J'utilise expressjs avec nowjs, je lie certains événements à l'objet now à l'intérieur de la route quand on y accède. Ce n'est pas très propre, et j'ai l'impression que tout ce qui est accessible à la racine, les événements sont exécutés.Événement lié dans route Node.js

Je ne sais pas comment, mais je me demande si je pourrais déplacer ailleurs?

app.get('/room/:name', function(req, res) 
{ 
    //Should this code be moved elsewhere?... how? 
    nowjs.on('connect', function() 
    { 
    this.now.room = req.params.name; 
    nowjs.getGroup(this.now.room).addUser(this.user.clientId); 
    console.log("Joined: " + this.now.name); 
    }); 

    everyone.now.distributeMessage = function(message){ 
    nowjs.getGroup(this.now.room).now.receiveMessage(this.now.name, message); 
    }; 

    res.render('room', { user : user }); 
}); 

Répondre

0

Vous pouvez séparer le code de la pièce dans un autre module sur, peut-être même d'appliquer un motif tel que MVC à votre application.

var Room = require('./models/room'); 

... 

app.get('/room/:name', function(req, res) { 
    Room.initialize(params.name); 
    res.render('room', {user: user}); 
}); 

// models/room.js 

Room = { 
    initialize: function(name) { 
    nowjs.on('connect', function() { 
     this.now.room = name; 
     nowjs.getGroup(this.now.room).addUser(this.user.clientId); 
     console.log("Joined: " + this.now.name); 
    }); 

    everyone.now.distributeMessage = function(message){ 
     nowjs.getGroup(this.now.room).now.receiveMessage(this.now.name, message); 
    }; 
    } 
}; 

module.exports = Room; // makes `require('this_file')` return Room 

Je ne suis pas super familier avec Now.js, mais vous avez l'idée - mais le code qui ne concerne pas la pile HTTP dans un autre module, dans un autre fichier, et qu'il fasse et l'utiliser quand c'est nécessaire.

+0

Oui, je vois. J'étais plus préoccupé par l'événement .on() étant appelé sur chaque accès à la page. Cela va faire pour le moment. Merci. –

Questions connexes