无法在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,不包括
actions
和shortcuts
路由。 这使您可以利用REST蓝图路由,即使您需要命名空间您的RESTful API方法
现在使用相同的目录结构,即/controllers/v1/UserController.js
和/models/User.js
,您应该可以同时访问/login
和findOne
方法。
第二个选项是在config/blueprints.js
中将prefix
设置为/v1
控制器上所有蓝图path的可选装载path,包括
rest
,actions
和shortcuts
。 这使您可以利用蓝图路由,即使您需要命名空间您的API方法。 (注意:这仅适用于蓝图自动sails.config.routes
,而不适用于来自sails.config.routes
手动路由)
现在目录结构将是/controllers/UserController.js
和/models/User.js
。 你有你的映射/v1
设置。
另一方面,您可以完全closures蓝图路由并在/config/routes.js
设置自己的路由。 这会给你更多的灵活性,你也可以在config/env/[your_env].js
里有特定于environment
路由