我剛剛開始使用sails和nodejs。如何在sails中創建全局路由前綴?
我想知道,是否有一種簡單的方法來使用Sails中可用的配置創建全局前綴?或者我需要帶來另一個圖書館?
我在config/controller.js中找到了藍圖前綴配置。看起來應該是一個簡單的方法來做到這一點,因爲應用程序已經部分支持它...
我想在我的應用程序的所有路線前面得到/ api/v1之類的東西。
謝謝。
我剛剛開始使用sails和nodejs。如何在sails中創建全局路由前綴?
我想知道,是否有一種簡單的方法來使用Sails中可用的配置創建全局前綴?或者我需要帶來另一個圖書館?
我在config/controller.js中找到了藍圖前綴配置。看起來應該是一個簡單的方法來做到這一點,因爲應用程序已經部分支持它...
我想在我的應用程序的所有路線前面得到/ api/v1之類的東西。
謝謝。
您可以在config/controller.js中將prefix屬性設置爲/api/v1
。但請注意,這隻會將前綴添加到藍圖路線(由Sails自動生成的路線)。
因此,前綴設置爲/api/v1
和路線/some
,它可以在uri /api/v1/some
訪問。
但是,如果你聲明你的路線是這樣的:"post /someEndPoint": {controller: "someController", action: "someAction"}
,這個前綴什麼都不做。
在這種情況下,你必須手動進行這樣寫:post /api/v1/someEndPoint
和config/controller.js
設置爲false actions
特性(至少在生產中)要關閉自動生成路線爲你的控制器中的每一個動作。
@EDIT 2014年8月8日
上述適用於的Sails.Js
版本比v0.10小。因爲我不再使用Sails,我不知道現在適用於當前版本的框架。
@EDIT 2014年8月14日
對於sails.js版本> = 0.10,其中前綴可設置配置文件是config/blueprints.js
。它具有與舊版本相同的功能。
@Edit 2015年9月7日
據我所知,框架不支持手動定義的路由全局前綴,但因爲你仍然可以使用JavaScript在你的配置文件(因爲配置文件是nodeJs模塊而不是JSON文件),您可以輕鬆調整此功能以按需要工作。
假設您的藍圖配置文件中的prefix
屬性設置爲/api
,則可以在您的路由中包含此代碼。
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',
});
從版本0.12.x開始,它位於第100行的config/blueprints.js中。如前所述適用相同的規則。該前綴僅適用於藍圖自動漫遊,而不是在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: '',
< ----- line 100 in config/blueprints。JS
如果你明確config/routes.js
定義你的路由,然後嘗試了這一點:https://stackoverflow.com/a/42797788/5326603
感謝。但是,這有點兒是我希望避免的......我希望*帆子有一個簡單的配置,允許(與藍圖分開)。但似乎我可能不得不手動配置它... – rcheuk
@harmlessdragon是的,我有同樣的問題,我認爲前綴應該解決它,但沒有。所以你必須爲每條路線手動編寫你的前綴,我也是這麼做的......我知道有點麻煩,但我看到有一些關於這方面的討論,也爲這些路由添加了前綴。最好的部分是你的路由在同一個文件中,當他們要在前綴 – eAbi
上添加「預期功能」時,更改它們會很簡單。現在,這不適用於v10 sail.js,因爲config /控制器已棄用 –