2016-08-04 15 views
0

Ich bin neu in Express und Programmierung im Allgemeinen.Express - Exportieren mehrerer Router() oder eines einzelnen Routers()?

Wenn Sie this book folgen, lernen Sie, einen einzelnen Router() zu erstellen, der alle Routen zu allen Controllern abbildet. Sie am Ende mit:

controllers 
    users.js 
    (other controllers....) 
routes 
    routes.js 

Dieser Router dann auf Ihre App über einen einzigen Anruf zu app.use(router) eingeführt wird.


Wenn Sie jedoch Ihre App über express-generator generieren, wird es eine Probenstruktur mit mehreren Router() s erzeugen, die dann app.use() Anrufe an Ihre App über mehrere montiert. Zum Beispiel:

app.use('/users', users) // mounts a Router() 
app.use('/posts', posts) // mounts another Router() 
Es scheint, dass Express bevorzugt einen separaten Router für jeden Controller haben angebracht. Habe ich es richtig verstanden?

Im Beispiel express-generator sind Rückrufe in Routen fest verdrahtet. Nehmen wir an, Sie möchten Controller in Ihren Code einführen.

Sie würden so etwas haben?

controllers 
    users 
     routes.js 
     callbacks.js 
    [other controller] 
     [its Router()].js 
     [its callbacks].js 

Meine Fragen ist, was ist der bessere Weg zu gehen?

Gibt es ein architektonisches Konzept, das ich falsch verstehe? (Vielleicht sollte ich sollten hart-Verdrahtung Callbacks in Routen, wenn ich mehrere Router usignieren?)

Vielen Dank für alle Antworten.

Antwort

1

Multi-Router ermöglicht es, Ihre Routen in Modulen zu trennen. Es vermeidet, eine große Datei mit allen Routen zu haben. Beispiel: Wenn Sie app.use('/users', users) übernehmen, enthält Ihre Datei users.js alle Routen, die Benutzern zugeordnet sind.

Ich persönlich arbeite an einem Projekt mit Mungo (http://mongoosejs.com/), die diese Architektur verwenden:

express/ 
    index.js <- Main file to configure express router with adding middlewares, etc. 
    routes.js <- All your routes are required in this file 
    entities/ 
     users/ 
      users.model.js <- Model of the user 
      users.controller.js <- Controller associated to the model. Any route call a function of the controller 
      users.routes.js <- All routes for users 
     projects/ 
      projects.model.js 
      projects.controller.js 
      projects.routes.js 

Mit einer Multi-Router-Architektur, werden Sie Verstärkung Skalierbarkeit und Lesbarkeit. Und Trennung zwischen Rückrufen und Routen vermeiden, Ihren Router mit Controller-Code zu verschmutzen.