无法在SailJS中创build版本化的API

首先,各种依赖的版本
Ubuntu – 15.04
NodeJS – 6.10.3
NPM – 3.10.10
– 0.12.13

其次,这是我做的:
1.全球安装帆
2.在/var/www目录下运行命令sails new app
3.在api/controllers/v1创build一个文件UserController.js
4.在api/models创build一个User.js文件

UserController.js的代码

 module.exports = { findOne: function(req, res) { return res.send("Hello World!!! User -> findOne"); }, login: function(req, res) { return res.send("Hello World!!! User -> login"); } } 

User.js代码

 module.exports = {} 

现在,当我使用sails lift启动服务器时,会发生以下情况:

  • 浏览http:// localhost:1337 / v1 / user / 1 – 找不到页面(404)
  • 浏览http:// localhost:1337 / v1 / user / login

    你好,世界!!! 用户 – >login


我知道我会听起来很愚蠢,但我认为这可能是因为我没有使用Sails的Generator特性。 所以,下面是我做的: sails generate api v1/Product 。 而这个命令之后的文件结构是这样的:

 api |-- controllers |-- v1 |-- UserController.js |-- V1 |-- ProductController.js |-- models |-- User.js |-- V1 |-- Product.js 

我在ProductController.js编写了类似的代码,就像我在UserController.js做的一样,我期望现在的产品API可以工作,但是结果与/v1/user/1情况相同。


根据SailJS Blueprint API ,这应该起作用了。 所以,任何人都可以解释为什么会发生这种情况,我如何使/v1/user/1/v1/user/login都按预期工作。

你有几个方法来实现这一点。 第一个选项是将restPrefix设置为config/blueprints.js /v1

控制器上所有REST蓝图路由的可选安装path,不包括actionsshortcuts路由。 这使您可以利用REST蓝图路由,即使您需要命名空间您的RESTful API方法

现在使用相同的目录结构,即/controllers/v1/UserController.js/models/User.js ,您应该可以同时访问/loginfindOne方法。

第二个选项是在config/blueprints.js中将prefix设置为/v1

控制器上所有蓝图path的可选装载path,包括restactionsshortcuts 。 这使您可以利用蓝图路由,即使您需要命名空间您的API方法。 (注意:这仅适用于蓝图自动sails.config.routes ,而不适用于来自sails.config.routes手动路由)

现在目录结构将是/controllers/UserController.js/models/User.js 。 你有你的映射/v1设置。

另一方面,您可以完全closures蓝图路由并在/config/routes.js设置自己的路由。 这会给你更多的灵活性,你也可以在config/env/[your_env].js里有特定于environment路由