Ich hatte ein ähnliches Problem, aber dann erinnerte ich mich das ist alles "nur Javascript" und war in der Lage, eine Antwort zu verwirren.
Wenn Sie in mehreren Dateien Ihre Routen definiert haben (anstatt sie alle in eine Routen/index.js Datei pauken) bauen Sie können nur die Routen in einem hackish Weise Objekt (wie folgt):
var express = require('express')
, routes = {
index: require('./routes').index
, events: require('./routes/events.js').events
}
, hbs = require('hbs');
HINWEIS: Sie nicht benötigen die Express-und HBs-Definitionen (erste und letzte Zeile) drin, ich habe es nur dort, um Ihnen ein wenig Kontext. Dieses Code-Snippet stammt direkt von meiner app.js-Datei.
Beachten Sie die .index
und .events
verkettet auf die require()
Funktionsaufrufe. Das ist der Schlüssel. Meine events.js Datei hat nur einen Export (Ereignisse):
exports.events = function(req, res){
console.log('in events');
res.render('events', { events: events, title: "EVENTS" });
console.log('events done');
};
Da die require()
Funktion im Wesentlichen eine Datei packt und erfordert (Importe) alle nicht-privaten Vars (das heißt, diejenigen, die an der speziellen exports
Objekt) und stellt sie der Datei zur Verfügung, die den require()
Aufruf enthält, kann ich die spezifische Funktion, die ich benötige, einfach aus der Datei abrufen, die ich mit dem require()
-Aufruf einschließe.Wenn ich in der gewünschten Datei mehrere Exporte definiert hatte, stelle ich mir ich sie greifen konnte wie so (nicht getestet):
routes = {
index: require('./routes').index
, events: require('./routes/events.js').events
, favorites: require('./routes/events.js').favorites
, upcoming: require('./routes/events.js').upcoming
}
Ich vermute, dass dies jemand mit einem Bündel von NodeJS oder MVC ein Aneurysma erleben geben würde, wenn Sie lesen Ihren Code (ich wette, dass es die gleiche Datei dreimal enthalten würde, aber ich bin mir nicht wirklich sicher). Vielleicht besser dran zu tun:
routes = {
index: require('./routes').index
, events: require('./routes/events.js').events
, favorites: require('./routes/favorites.js').favorites
, upcoming: require('./routes/upcoming.js').upcoming
}
Ansonsten, warum nicht alle im Index schieben? Nicht wirklich sicher, aber das ist nur mein zweiter Tag der Arbeit mit Knoten und einem seiner verbundenen Technologien ...
wahrscheinlich auch Ihnen helfen, wenn Sie eine console.log Anweisung direkt nach dem var Erklärungen werfen:
console.log(routes);
+1 "aber dann erinnerte, das ist alles" nur Javascript "und war in der Lage, eine Antwort zu verwirren." !! Fabelhafte Antwort :) –
"Module werden zwischengespeichert, nachdem sie das erste Mal geladen wurden" http://nodejs.org/api/modules.html#modules_caching –