Express: como passar instância de aplicativo para rotas de um arquivo diferente?

Eu quero dividir minhas rotas em arquivos diferentes, onde um arquivo contém todas as rotas e o outro as ações correspondentes. Atualmente, tenho uma solução para conseguir isso, no entanto, preciso tornar a instância do aplicativo global para poder acessá-la nas ações. Minha configuração atual é assim:

app.js:

<code>var express   = require('express');
var app       = express.createServer();
var routes    = require('./routes');

var controllers = require('./controllers');
routes.setup(app, controllers);

app.listen(3000, function() {
  console.log('Application is listening on port 3000');
});
</code>

routes.js:

<code>exports.setup = function(app, controllers) {

  app.get('/', controllers.index);
  app.get('/posts', controllers.posts.index);
  app.get('/posts/:post', controllers.posts.show);
  // etc.

};
</code>

controllers / index.js:

<code>exports.posts = require('./posts');

exports.index = function(req, res) {
  // code
};
</code>

controllers / posts.js:

<code>exports.index = function(req, res) {
  // code
};

exports.show = function(req, res) {
  // code
};
</code>

No entanto, essa configuração tem um grande problema: eu tenho um banco de dados e uma instância de aplicativo que preciso passar para as ações (controllers / *. Js). A única opção que consegui pensar é tornar as duas variáveis ​​globais, o que não é realmente uma solução. Eu quero separar as rotas das ações porque eu tenho muitas rotas e as quero em um lugar central.

Qual é a melhor maneira de passar variáveis ​​para as ações, mas separar as ações das rotas?

questionAnswers(6)

yourAnswerToTheQuestion