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?