在Sailsjs中是否有可能构建更复杂的模型

时间:2013-06-14 10:31:49

标签: sails.js waterline

我想在我的模型中有数组或集合,这是否可以使用waterline(mongoDB)?周围有其他选择吗?

示例:

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

到:

module.exports = {

    attributes : {

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

};

2 个答案:

答案 0 :(得分:3)

我不知道这是否仍然是一个问题,但诀窍是既没有POST作为“form-data”也没有“x-www-url-encoded”。你必须发布“原始”内容:

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


表单数据

您的标题可能如下所示:

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]"得到(type-)验证,失败


X WWW的网址编码

在这种情况下,标题是这样的:

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]"

,验证失败

原始

让它工作你的Header必须看起来像这样:

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

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

可以产生您想要的结果,并且类型验证可以正常工作。


所以最后,您可以用JSON中的方式填充最复杂的模型。 e.g。

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"
         }]
       }

答案 1 :(得分:2)

如果你正在寻找模型关联,它还没有(如果你想提出实现那么this issue)如果你只想在DB中存储数据数组,你可以将数组作为属性(请参阅the doc以获取参考。我没有对它进行过测试,但我想如果没有匹配的结构,它会在将数据保存到数据库之前对其进行序列化。