2015-11-27 2 views
0

У меня есть expressjs приложения с обработкой straitfort маршрута, как следующее:Как передать обработку маршрута в экспресс?

app.route('/').get(function(req, res, next) { 
    // handling code; 
}); 

app.route('/account').get(function(req, res, next) { 
    // handling code;  
}); 

app.route('/profile').get(function(req, res, next) { 
    // handling code; 
}); 

В Сейчас я ставлю все мой код внутри обработчика маршрута, но я хочу попытаться передать его в какой-то класс, такие как следующие.

app.route('/').get(function(req, res, next) { 
    new IndexPageController().get(req, res, next); 
}); 

app.route('/account').get(function(req, res, next) { 
    new AccountPageController().get(req, res, next); 
}); 

app.route('/profile').get(function(req, res, next) { 
    new ProfilePageController().get(req, res, next); 
}); 

Итак, что вы думаете о подходе выше, и знаете ли вы, что лучше?

ответ

1

Как вы можете видеть в Express Response documentation - ответ (req) может отправить информацию клиенту несколькими способами. Самый простой способ заключается в использовании req.render как:

// send the rendered view to the client 
res.render('index'); 

Зная это означает, что вы можете делать все, что вы хотите в другой функции, и в конце концов просто позвоните res.render (или любой другой метод, который отправляет информацию клиенту). Например:

app.route('/').get(function(req, res, next) { 
    ndexPageController().get(req, res, next); 
}); 

// in your IndexPageController: 

function IndexPageController() { 
    function get(req, res, next) { 
     doSomeDatabaseCall(function(results) { 
      res.render('page', results); 
     } 
    } 

    return { 
     get: get 
    } 
} 
// actually instantiate it here and so module.exports 
// will be equal to { get: get } with a reference to the real get method 
// this way each time you require('IndexPageController') you won't 
// create new instance, but rather user the already created one 
// and just call a method on it. 
module.exports = new IndexPageController(); 

Не существует строгого подхода к этому вопросу. Вы можете передать ответ, а другой - сделать рендер. Или вы можете подождать, когда произойдет другое (например, вызов db), а затем вызовите рендер. Все зависит от вас - вам просто нужно как-то отправить информацию клиенту :)

+0

благодарит за ответ. Я просто беспокоюсь о создании нового объекта каждый раз для каждого запроса. – Erik

+0

Затем создайте одноэлементные файлы (с одним экземпляром). Таким образом, у вас будет один экземпляр и вызовите его метод для каждого запроса. Просто обновил свой ответ. –

+0

Спасибо за ответ, но я хочу создать новый экземпляр контроллера по каждому запросу. Это влияет на производительность или увеличение памяти? – Erik

 Смежные вопросы

  • Нет связанных вопросов^_^