Node.js 如何在sails中创建全局路由前缀?
我最近才开始使用sail和nodejs 我想知道,有没有一种简单的方法可以使用Sails中的配置创建全局前缀?或者我需要带另一个图书馆 我在config/controller.js中找到了blueprint前缀配置。似乎应该有一个简单的方法来实现这一点,因为应用程序已经部分支持它 我正在尝试在我的应用程序的所有路由前面获得类似于/api/v1的东西Node.js 如何在sails中创建全局路由前缀?,node.js,routing,sails.js,Node.js,Routing,Sails.js,我最近才开始使用sail和nodejs 我想知道,有没有一种简单的方法可以使用Sails中的配置创建全局前缀?或者我需要带另一个图书馆 我在config/controller.js中找到了blueprint前缀配置。似乎应该有一个简单的方法来实现这一点,因为应用程序已经部分支持它 我正在尝试在我的应用程序的所有路由前面获得类似于/api/v1的东西 谢谢。您可以在config/controller.js中将prefix属性设置为/api/v1。但请注意,这只会将前缀添加到蓝图路线(由Sails自
谢谢。您可以在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
中的actions
属性设置为false(至少在生产中),以关闭控制器中每个操作的自动生成路由
@EDIT 08.08.2014
以上内容适用于小于v0.10的Sails.Js
版本。因为我不再使用Sails,所以我不知道什么适用于当前版本的框架
@EDIT 14.08.2014
对于sails.js>=0.10的版本,可以设置前缀的配置文件是config/blueprints.js
。它具有与旧版本相同的功能
@Edit 07.09.2015
据我所知,该框架不支持手动定义路由的全局前缀,但由于您仍然可以在配置文件中使用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中。上述规则同样适用。前缀仅适用于blueprint自动路由,而不是在config/routes.js中手动创建路由
/***************************************************************************
* *
*控制器上所有blueprint路由的可选装载路径*
*包括“休息”、“动作”和“快捷方式”。这允许你采取行动*
*blueprint路由的优势,即使您需要为API命名名称空间*
*方法*
* *
*(注意:这仅适用于blueprint自动路线,而不适用于来自的手动路线。)*
*'sails.config.routes')*
* *
***************************************************************************/
//前缀:“”,
如果您在config/routes.js
中明确定义了路由,请尝试以下操作:谢谢。但这正是我希望避免的……我希望Sails有一个简单的配置,允许这样做(与蓝图分开)。但似乎我必须手动配置它…@HarmlesDragon是的,我也有同样的问题,我认为前缀应该解决它,但没有。所以你必须手动为每条路线写前缀,我也这么做了。。。我知道这有点混乱,但我看到有一些关于这方面的讨论,将前缀添加到这些路由中。好的方面是,您的路由在同一个文件中,当它们要在Prefixts上添加“预期功能”时,更改它们会更容易。现在,这在v10 sail.js上不起作用,因为不支持配置/控制器。如果您使用sails.js v>=0.10,您现在应该在config/blueprints.js中设置前缀。根据该文件中的一条评论,“这仅适用于blueprint自动路线,而不适用于来自sails.config.routes
”的手动路线。自2018年起,@Edit 07.09.2015
的方法仍能正常工作(sails 1.0)