Voglio dividere i miei percorsi in file diversi, dove un file contiene tutti i percorsi e l'altro le azioni corrispondenti. Al momento ho una soluzione per raggiungere questo obiettivo, tuttavia ho bisogno di rendere globale l'istanza dell'app per poterlo accedere nelle azioni. La mia configurazione attuale si presenta così:Express: come passare l'istanza app alle rotte da un file diverso?
app.js:
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');
});
routes.js:
exports.setup = function(app, controllers) {
app.get('/', controllers.index);
app.get('/posts', controllers.posts.index);
app.get('/posts/:post', controllers.posts.show);
// etc.
};
controller/index.js:
exports.posts = require('./posts');
exports.index = function(req, res) {
// code
};
controllori/messaggi .js:
exports.index = function(req, res) {
// code
};
exports.show = function(req, res) {
// code
};
Tuttavia, questa configurazione ha un grosso problema: ho un database e un'istanza di app che devo passare alle azioni (controller/*. Js). L'unica opzione che potrei pensare, è rendere entrambe le variabili globali che non è davvero una soluzione. Voglio separare i percorsi dalle azioni perché ho molti percorsi e li voglio in un posto centrale.
Qual è il modo migliore per passare variabili alle azioni ma separare le azioni dai percorsi?
Come sembra il tuo controller.js? Forse puoi renderlo una funzione (invece di un oggetto) che può ricevere parametri. – mihai
require ('controller') richiede controller/index.js. Tuttavia, una funzione non funzionerà perché uso l'oggetto nelle rotte (vedi routes.js) e quindi non posso passare argomenti ad esso, anche se è una funzione. –