Node.js 如何在sails中创建全局路由前缀?

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自

我最近才开始使用sail和nodejs

我想知道,有没有一种简单的方法可以使用Sails中的配置创建全局前缀?或者我需要带另一个图书馆

我在config/controller.js中找到了blueprint前缀配置。似乎应该有一个简单的方法来实现这一点,因为应用程序已经部分支持它

我正在尝试在我的应用程序的所有路由前面获得类似于/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
中的
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)