2013-10-29 4 views
9

Ich habe gerade erst begonnen, Segel und Nodejs zu verwenden.Wie erstellt man ein globales Routenpräfix in Segeln?

Ich frage mich, gibt es eine einfache Möglichkeit, ein globales Präfix mit der Konfiguration in Sails zu erstellen? Oder müsste ich eine andere Bibliothek mitbringen?

Ich habe die Konfiguration des Blueprint-Präfix in config/controller.js gefunden. Es scheint, es sollte eine einfache Möglichkeit, dies zu tun, da die Anwendung es bereits teilweise unterstützt ...

Ich versuche, etwas wie/api/v1 vor allen Routen, die ich für meine Anwendung habe.

Danke.

Antwort

14

Sie können die Präfix-Eigenschaft in config/controller.js auf /api/v1 setzen. Beachten Sie jedoch, dass das Präfix nur den Blueprint-Routen hinzugefügt wird (die automatisch von Sails generiert werden).

Mit dem Präfix /api/v1 und der Route /some könnte man also auf uri /api/v1/some zugreifen.

Aber wenn Sie Ihre Routen wie folgt deklarieren: "post /someEndPoint": {controller: "someController", action: "someAction"}, das Präfix tut nichts.

In diesem Fall müssen Sie sie wie folgt manuell schreiben: post /api/v1/someEndPoint und auf false der actions Eigenschaft von config/controller.js (zumindest in der Produktion) automatisch erzeugte Routen für jede Aktion in Ihrem Controller auszuschalten.

@EDIT 08.08.2014

Das Vorstehende gilt für Versionen von Sails.Js kleiner als v0.10. Da ich mit Sails nicht mehr arbeite, weiß ich nicht, was nun für die aktuelle Version des Frameworks gilt.

@EDIT 14.08.2014

Für Versionen von sails.js> = 0,10, die Konfigurationsdatei, in der das Präfix gesetzt werden kann, ist config/blueprints.js. Es hat die gleiche Funktionalität wie für ältere Versionen.

@Edit 07.09.2015

Soweit ich weiß, wird der Rahmen nicht ein globales Präfix für manuell definierten Routen unterstützen, aber da Sie noch können Sie Javascript in Ihrer Konfigurationsdatei verwenden (da die Konfiguration Dateien sind NodeJs-Module und keine JSON-Dateien), Sie können diese Funktionalität ganz nach Bedarf anpassen.

Angenommen, die prefix-Eigenschaft ist in Ihrer Blueprints-Konfigurationsdatei auf /api eingestellt, können Sie diesen Code in Ihren Routen haben.

var blueprintConfig = require('./blueprints'); 

var ROUTE_PREFIX = blueprintConfig.blueprints.prefix || ""; 

// add global prefix to manually defined routes 
function addGlobalPrefix(routes) { 
    var paths = Object.keys(routes), 
     newRoutes = {}; 

    if(ROUTE_PREFIX === "") { 
    return routes; 
    } 

    paths.forEach(function(path) { 
    var pathParts = path.split(" "), 
     uri = pathParts.pop(), 
     prefixedURI = "", newPath = ""; 

     prefixedURI = ROUTE_PREFIX + uri; 

     pathParts.push(prefixedURI); 

     newPath = pathParts.join(" "); 
     // construct the new routes 
     newRoutes[newPath] = routes[path]; 
    }); 

    return newRoutes; 
}; 

module.exports.routes = addGlobalPrefix({ 

    /*************************************************************************** 
    *                   * 
    * Make the view located at `views/homepage.ejs` (or `views/homepage.jade`, * 
    * etc. depending on your default view engine) your home page.    * 
    *                   * 
    * (Alternatively, remove this and add an `index.html` file in your   * 
    * `assets` directory)              * 
    *                   * 
    ***************************************************************************/ 

    // '/': { 
    // view: 'homepage' 
    // }, 

    /*************************************************************************** 
    *                   * 
    * Custom routes here...             * 
    *                   * 
    * If a request to a URL doesn't match any of the custom routes above, it * 
    * is matched against Sails route blueprints. See `config/blueprints.js` * 
    * for configuration options and examples.         * 
    *                   * 
    ***************************************************************************/ 

    'post /fake': 'FakeController.create', 
}); 
+1

Dank. Aber das ist irgendwie, was ich zu vermeiden hoffte ... ich hatte * gehofft * Segel hatten eine einfache Konfiguration, die das erlaubte (getrennt von den Bauplänen). Aber es scheint, dass ich es manuell konfigurieren muss ... – rcheuk

+0

@harmlessdragon ja, ich hatte das gleiche Problem und ich dachte, das Präfix sollte es lösen, aber tat es nicht. Du musst also dein Präfix für jede Route manuell schreiben, ich habe es auch getan ... Ich weiß, dass es irgendwie chaotisch ist, aber ich habe gesehen, dass es eine Diskussion darüber gab, um diesen Routen auch das Präfix hinzuzufügen. Der gute Teil ist, dass Ihre Routen in der gleichen Datei sind, und es wird einfacher sein, sie zu ändern, wenn sie die "erwartete Funktionalität" auf dem Präfix – eAbi

+0

hinzufügen Das wird nicht auf v10 sail.js jetzt funktionieren, wie config/Controller sind veraltet –

0

Ab Version 0.12.x, dies in config ist/blueprints.js auf Linie 100. Die gleichen Regeln gelten wie zuvor erwähnt. Das Präfix gilt nur für Blueprint-Autoroutes, nicht manuell in config/routes.js.

/*************************************************************************** * * * An optional mount path for all blueprint routes on a controller, * * including 'rest', 'actions', and 'shortcuts'. This allows you to take * * advantage of blueprint routing, even if you need to namespace your API * * methods. * * * * (NOTE: This only applies to blueprint autoroutes, not manual routes from * * 'sails.config.routes') * * * ***************************************************************************/ // prefix: '', < ----- Zeile 100 in Config/Blueprints.js

Verwandte Themen