Estaba teniendo un problema similar, pero luego recordé que todo esto es "solo javascript" y pude confundir una respuesta.
Si usted quiere tener sus rutas definido en varios archivos (en lugar de abarrotar todos en un archivo de rutas/index.js) sólo se puede construir las vías objeto de una manera hacker (como sigue):
var express = require('express')
, routes = {
index: require('./routes').index
, events: require('./routes/events.js').events
}
, hbs = require('hbs');
NOTA: No necesita necesita las definiciones express y hbs (primera y última línea) allí, simplemente lo puse ahí para darle un pequeño contexto. Este fragmento de código vino directamente de la parte superior de mi archivo app.js.
Observe .index
y .events
encadenados a las llamadas a la función require()
. Esa es la clave. Mi archivo events.js sólo tiene una exportación (eventos):
exports.events = function(req, res){
console.log('in events');
res.render('events', { events: events, title: "EVENTS" });
console.log('events done');
};
Dado que la función require()
agarra esencialmente un archivo y no requiere ningún (importaciones) Vars no privados (es decir, las vinculadas a la exports
objeto especial) y los expone al archivo que contiene la llamada require()
, solo puedo obtener la función específica que estoy solicitando del archivo que estoy incluyendo con la llamada require()
.Si hubiera varias exportaciones se define en el archivo requerido, imagino que podía agarrarlos como tal (no se han probado):
routes = {
index: require('./routes').index
, events: require('./routes/events.js').events
, favorites: require('./routes/events.js').favorites
, upcoming: require('./routes/events.js').upcoming
}
Sospecho que esto daría a alguien con un montón de nodejs o MVC experimentar un aneurisma si leen tu código (apuesto a que incluiría el mismo archivo 3 veces, pero no estoy seguro). Quizás sea mejor que hacer:
routes = {
index: require('./routes').index
, events: require('./routes/events.js').events
, favorites: require('./routes/favorites.js').favorites
, upcoming: require('./routes/upcoming.js').upcoming
}
De lo contrario, ¿por qué no meterlos todos en el índice? No es muy seguro, sin embargo, esto es sólo mi segundo día de trabajo con el Nodo y cualquiera de sus tecnologías relacionadas ...
También probablemente le ayudará si usted lanza un comunicado console.log justo después de sus declaraciones var:
console.log(routes);
+1 "pero luego recordé que esto es todo" solo javascript "y fue capaz de confundir una respuesta". !! Fabulosa respuesta :) –
"Los módulos se almacenan en caché después de la primera vez que se cargan" http://nodejs.org/api/modules.html#modules_caching –