SailsJS - 创建没有蓝图的版本化API

时间:2014-10-10 07:26:39

标签: javascript node.js git nginx sails.js

我试图找出如何为我的应用程序创建版本化API。 根据这个问题https://github.com/balderdashy/sails/issues/322,我必须使用蓝图,但是我的项目中的所有蓝图都已停用(我老板的愿望)。

我希望能够为任何版本提供http://myapi.com/v1/my-custom-route等任何网址,等等。

到目前为止,我发现的最好方法是将所有控制器复制到类似v322AuthController.js的内容并映射所有路径,例如

'POST /v3.2.2/se-connecter'              : 'v322AuthController.perform_signin'

但我认为这是一个丑陋的伎俩。我目前正在使用Nginx,我的所有代码都使用git进行版本化

如果你有任何想法,谢谢你

Kai23

2 个答案:

答案 0 :(得分:1)

你必须禁用所有蓝图吗?比你必须自己编写所有路线。

如果您不想复制控制器,可以试试这个:

config/routes.js

module.exports.routes = {

 'post /:apiversion/se-connecter' : {
    controller: 'AuthController',
    action: 'perform_signin',
    skipAssets: true
 }
....
}

所以Sails将所有* / se-connecter传递给你的“AuthController”方法“perform_signin”。在您的控制器中,您有api版本:

AuthController.js

module.exports = {
   perform_signin: function (req, res) {

      var apiversion = req.param('apiversion');

      if (apiversion === "0.2.0") {
         ....
      }
   }

}

答案 1 :(得分:0)

我的方法:

为您的控制器创建子文件夹:

/controllers/v1/UserController.js
/controllers/v2/UserController.js

在routes.js文件中,添加如下:

'POST /api/v2/user': 'v2/UserController.create',
'POST /api/v1/user': 'v2/UserController.create',

在您的policies.js中,您可以添加如下的中间件:

  'v2/UserController': {
    'create': ['isAuthenticated','isAuthorized']
   }

我目前的风帆版本是:0.12.3