2017-09-29 2 views
0

heute Im hier nicht nur gute Antworten zu überprüfen, aber fragen Sie! Ich mag folgend mit Sails.js und seinen routes.js tun.Sails.js benutzerdefinierte Route mit dem gleichen Controller, aber verschiedene Layouts

My problem picture

Was ich will, ist tatsächlich verschiedene Layouts auf Basis von der Art des Benutzers, der angemeldet ist ich weiß, wie man das tun, aber ich möchte nicht diese auf der routes.js Datei schreiben (weil es chaotisch ist, und ich möchte nicht-Controller erstellen, um die Aufgabe der Route selbst zu tun):

'get /adminSpace/*' : { 
    controller : 'adminSpace' //setting layout on controller 
}, 
'get /userSpace/*' : { 
    controller : 'userSpace' // //setting layout on controller 
} 

Eine schnelle Möglichkeit, wenn möglich, wäre es so zu schreiben:

'get /[user|admin]/projects/*' : { 
    controller : 'project' 
    locals: { 
     layout: 'based_on_url' 
}} 

Ist das irgendwie möglich?

+0

Nur um klar zu sein, ich möchte nicht die Zwischenhändler-ähnliche AdminSpaceController und UserSpaceController hinzufügen, um das Layout einzurichten! Und dann jede Controller-URL für jede Rolle spezialisieren. Irgendwelche Tipps? – paulogdm

+0

Sails Routen können einige ziemlich knifflige Sachen machen: http://sailsjs.com/documentation/concepts/routes/custom-routes, aber mein Instinkt sagt mir, warum nicht Benutzer Ihren Controller? Ich bin mir nicht sicher, ob Locals in der routes-Datei auf Platzhalter (wie [user | admin] usw.) zugreifen können, die von der Route selbst oder anderen dynamischen Daten stammen. – arbuthnott

+0

Ich habe auch das Gefühl, dass zwei Routen einfacher sein können! Andere Entwickler, die sich Ihren Code ansehen, könnten zwei Routen schneller verstehen, als die witzige Syntax zu analysieren, mit der Regex in die Routen eingefügt werden. – arbuthnott

Antwort

0

Okay, ich glaube, ich lese, was Sie wollen, basierend auf den Kommentaren - Sie wollen unterschiedliche Verhalten für normale und Admin-Benutzer. Sie haben Code, um dies in Ihrer routes.js Datei und in Ihrem views zu behandeln, aber Sie möchten, dass die Controller den Unterschied ignorieren - sie können ihr Ding tun, ohne sich um "admin vs normal" zu kümmern.

Sie können das tun von den Einheimischen auf zwei verschiedenen Routen Einstellung auf dem gleichen Controller zeigt:

'GET /adminSpace/*' : { 
    controller : 'UserController', 
    locals: { 
     admin: true, 
     _layoutFile: 'admin' 
    } 
}, 
'GET /userSpace/*' : { 
    controller : 'UserController', // same as above 
    locals: { 
     admin: false, 
     _layoutFile: 'user' 
    } 
}, 

Dann in Ihrem UserController:

someAction: function(req, res) { 
    // any logic needed 
    // can access sails.locals.admin if necessary, but do not have to 
    return res.view(); // will use admin.ejs or users.ejs as set in route 
} 

aus Ihrer Sicht die Einheimischen in der Route gesetzt wird weiterhin verfügbar sein, und Sie können bei Bedarf zusätzliche Locals im Controller hinzufügen. Hoffe das war was du gesucht hast!

+0

Ich kann damit arbeiten. Danke! – paulogdm

Verwandte Themen