微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我刚刚开始使用sails和nodejs.

我想知道,有没有一个简单的方法来创建一个全局前缀使用Sails中提供的配置?还是需要引进另一个图书馆?

我在config / controller.js中找到蓝图前缀配置.这似乎应该是一个简单的方法,因为应用程序已经部分支持它了…

我正在尝试在我的应用程序的所有路由前面找到像/ api / v1这样的东西.

谢谢.

解决方法

您可以在config / controller.js中将prefix属性设置为/ api / v1.但请注意,这只会为蓝图路由(由Sails自动生成的路由)添加前缀.

因此,当前缀设置为/ api / v1和route / 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',});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐