Событие привязано к маршруту Node.js - PullRequest
0 голосов
/ 31 декабря 2011

Я использую expressjs вместе с nowjs, я связываю некоторые события с объектом now прямо внутри маршрута при обращении к нему. Это не очень чисто, и я чувствую, что все, к чему есть доступ к корню, выполняются события.

Я не уверен, как, но мне интересно, могу ли я переместить это в другое место?

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 });
});

1 Ответ

0 голосов
/ 31 декабря 2011

Вы можете разделить код комнаты в другой модуль, возможно даже применив такой шаблон, как MVC , к своему приложению.

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

Я не очень знаком с Now.js, но вы поняли идею - но код, который не касается стека HTTP в другом модуле, в другом файле, требует его и использует его при необходимости.

...