Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法在SailJS中创建版本化API_Javascript_Node.js_Rest_Api_Sails.js - Fatal编程技术网

Javascript 无法在SailJS中创建版本化API

Javascript 无法在SailJS中创建版本化API,javascript,node.js,rest,api,sails.js,Javascript,Node.js,Rest,Api,Sails.js,首先,各种依赖关系的版本 Ubuntu-15.04 NodeJS-6.10.3 NPM-3.10.10 航行-0.12.13 第二,我是这样做的: 1.全球安装的帆 2.在目录/var/www中,运行命令sailsnewapp 3.在api/controllers/v1 4.在api/models UserController.js的代码 module.exports = { findOne: function(req, res) { return res.send("Hello

首先,各种依赖关系的版本
Ubuntu-15.04
NodeJS-6.10.3
NPM-3.10.10
航行-0.12.13

第二,我是这样做的:
1.全球安装的帆
2.在目录
/var/www
中,运行命令
sailsnewapp

3.在
api/controllers/v1

4.在
api/models

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");
  }
}
module.exports = {}
User.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");
  }
}
module.exports = {}
现在,当我使用
sails lift
启动服务器时,会发生以下情况:

  • 浏览-找不到页面(404)
  • 浏览 你好,世界!!!用户->登录


我知道我听起来很傻,但我想这可能是因为我没有使用帆的发电机功能。下面是我接下来做的:
sails生成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的说法,这应该是有效的。那么,有谁能解释为什么会发生这种情况,以及我如何才能使
/v1/user/1
/v1/user/login
都按预期工作

您有几种方法来实现这一点。第一个选项是在
config/blueprints.js

控制器上所有REST blueprint路由的可选装载路径,不包括
操作
快捷方式
路由。 这允许您利用REST蓝图路由,即使您需要为RESTful API方法命名名称空间

现在,使用相同的目录结构,即
/controllers/v1/UserController.js
/models/User.js
,您应该能够访问
/login
findOne
方法

第二个选项是在
config/blueprints.js

控制器上所有blueprint路由的可选装载路径,包括
rest
操作
快捷方式
。 这允许您利用blueprint路由,即使您需要为API方法命名名称空间。 (注意:这仅适用于blueprint自动路线,而不适用于来自
sails.config.routes
的手动路线)

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


另一方面,您可以完全关闭blueprint routes并在
/config/routes.js
中设置自己的路由。这将为您提供更大的灵活性,并且您还可以在
config/env/[your_env].js中拥有
environment
特定的路由,这两种方法都是有效的,但是如果我想运行两个API
/v1/user/1
v2/user/1
,前两种方法将不起作用。此外,如果API的数量为100,则第三种方法将无法扩展。同意,这就是为什么最好在
config/routes.js
中手动配置路由。如果您的
api
有100个方法,那么
api
本身就很难处理。很抱歉,但我不同意在
config/routes.js
中配置每个路由是解决问题的最佳方法。谢谢你的回复,尽管别担心。就我个人而言,我见过大型生产系统在没有任何问题的情况下工作。我会很高兴,如果有人张贴一个更好的方法!