Try*_*ace 6 javascript node.js strongloop loopbackjs
有些问题我在文档中找不到答案.
我想要得到这样的结构:
Node:
id: '1sdf12asd123',
name: 'node1',
history:
[ ts: 234234234234,
data: { 'foo': 'bar' }
],
...
Run Code Online (Sandbox Code Playgroud)
所以每个单独的节点都有很多历史项.而且我希望能够在push不覆盖任何内容的情况下获得新数据.
现在,我不希望将所有内容存储在每个节点下,而是存储在单独的文档中,因此我认为embedsMany适合于此:
{
"name": "Node",
"plural": "Nodes",
"base": "PersistedModel",
"idInjection": true,
"options": {
"validateUpsert": true
},
"properties": {
"name": {
"type": "string"
}
},
"validations": [],
"relations": {
"history": {
"type": "embedsMany",
"model": "History",
"foreignKey": "HistoryId"
}
},
"acls": [],
"methods": {}
}
Run Code Online (Sandbox Code Playgroud)
所以历史可以简单地说:
{
"name": "History",
"base": "PersistedModel",
"idInjection": true,
"properties": {
"ts": {
"type": "Date"
},
"data": {
"type": "Object"
}
},
"validations": [],
"relations": {
"node": {
"type": "belongsTo",
"model": "Node",
"foreignKey": "NodeId"
}
},
"acls": [],
"methods": {}
}
Run Code Online (Sandbox Code Playgroud)
我不确定foreignKey部分是否正确,但我尝试了很多不同的组合,这个看起来很合理.
历史模型不公开,因此不作为端点公开.我想尽可能多地利用关系,而不是有一个单独的终点.
这里的主要问题是我想使用这里Nodes.history.add()描述的.
不过,我已经试了一下,从各种不同的方法Remote methods来Operation Hooks,但我找不到提到的辅助方法.没有关于此的代码示例.
部分我认为这是因为文档有时不是很清楚,或者对其他API框架的工作方式有一定程度的了解.我已经阅读了有关要找到的每一页文档.(一个例子是Core concepts页面链接到已弃用的Model hooks页面.)
我想知道的是什么:
.add()权利来推送模型上的数据,并让loopback管理应该存储它的位置,所以当我查询Node时我会收回所有history项目,除非我在服务器端阻止它(因为我不会'我想要每个节点数据本身的请求.push不覆盖任何内容的情况下使用数据timeStamp作为密钥?History模型是否需要知道它们Nodes与之的关系,BelongsTo或者它是否可以忽略它并且仍然有Nodes .add()每个历史项目?如果我正确理解你的问题,你可以这样做Node hasMany History。然后使用从关系生成的所有方法:
使用关系创建新历史记录
POST api/Node/{NodeId}/Histories/
Run Code Online (Sandbox Code Playgroud)
您应该能够通过适当地编写 JSON 数据,使用单个 POST 请求创建历史记录的多个实例
{
{
ts: 26283829879
},
{
ts: 5335329923
}
}
Run Code Online (Sandbox Code Playgroud)
从节点获取单个历史记录
GET api/Node/{NodeId}/Histories/{HistoryId}/
Run Code Online (Sandbox Code Playgroud)
您还可以从节点获取所有历史记录,编辑给定节点的任何历史记录等。
这有帮助吗?
请参阅 StrongLoop 文档了解HasMany 关系。