Sailsjs是否能够构建更复杂的模型?

10

我希望在我的模型中使用数组或集合,这在waterline(mongoDB)中是否已经可行?还有其他可选方案吗?

示例:

{
   name: Bundle,
   col1 : {
      name : anOtherModel,
      subCol: {
         text: aString,
         ...
      }
   },
   col2 : {
      name : anOtherModel,
      subCol: {
         text: aString,
         ...
      }
   }
}

to:

module.exports = {

    attributes : {

        name : {
            type : 'STRING',
            required : true
        },
        basicModules: {
            type : 'ARRAY', // or 'COLLECTION'
            required : false
        }
    }

};

1
我有同样的问题。你找到答案了吗? - Jakub Riedl
不,很遗憾,我认为目前还不可能! - Omid Hashemi
1
Sails在v0.9.x之后的版本中支持模型中的数组。http://sailsjs.org/#!documentation/models - Christopher Marshall
2个回答

3

我不知道这个问题是否仍然存在,但技巧是既不要以“form-data”也不要以“x-www-url-encoded”的形式POST。您必须POST“原始”内容:

假设情况如下:
http://www.example.com/mymodel


form-data

你的头可能看起来像这样:

POST /mymodel/create HTTP/1.1
Host: www.example.com
Cache-Control: no-cache

----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="basicModules"

[1,2,3,4]
----WebKitFormBoundaryE19zNvXGzXaLvS5C

结果是一个字符串"[1,2,3,4]"被(类型)验证,但失败了。


x-www-url-encoded

在这种情况下,头部信息大致如下:

POST /mymodel/create HTTP/1.1
Host: www.example.com
Cache-Control: no-cache
Content-Type: application/x-www-form-urlencoded

basicModules=%5B1%2C2%2C3%2C4%5D

与form-data完全相同的结果。验证失败是因为basicModules是字符串"[1,2,3,4]"


原始数据

为使其正常工作,您的标题应如下所示:

POST /mymodel/create HTTP/1.1
Host: www.example.com
Cache-Control: no-cache

{"basicModules":[1,2,3,4]}

这将导致你得到你想要的结果,并且类型验证有效。


因此,最终你可以以JSON格式填充最复杂的模型,例如:

POST /mymodel/create HTTP/1.1
Host: www.example.com
Cache-Control: no-cache

{"user": {
         "name": {
           "first":"John",
           "last":"Doe"
         },
         "age":25,
         "pets":[{
           "name":"Garfield",
           "type":"cat"
         },
         {
           "name":"Rudolph",
           "type":"reindeer"
         }]
       }

2
如果你正在寻找模型关联,目前还不存在(可以看看这个问题的提议实现:此问题),如果你只想在数据库中存储数据数组,你可以将数组作为属性(请参考文档)。我没有测试过,但我猜它会在保存到数据库之前对数组进行序列化,如果没有匹配的结构。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接