Strongloop Embeds未找到许多辅助方法

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 methodsOperation Hooks,但我找不到提到的辅助方法.没有关于此的代码示例.

部分我认为这是因为文档有时不是很清楚,或者对其他API框架的工作方式有一定程度的了解.我已经阅读了有关要找到的每一页文档.(一个例子是Core concepts页面链接到已弃用的Model hooks页面.)

我想知道的是什么:

  1. 是否使用.add()权利来推送模型上的数据,并让loopback管理应该存储它的位置,所以当我查询Node时我会收回所有history项目,除非我在服务器端阻止它(因为我不会'我想要每个节点数据本身的请求.
  2. 为每个History项创建一个单独的文档是不是一个好主意,其中包含nodeId,或者更好的是为每个节点创建一个histoy项,并在其中存储历史记录?对我来说主要的问题是,我如何在push不覆盖任何内容的情况下使用数据timeStamp作为密钥?
  3. History模型是否需要知道它们Nodes与之的关系,BelongsTo或者它是否可以忽略它并且仍然有Nodes .add()每个历史项目?

Ove*_*ivr 1

如果我正确理解你的问题,你可以这样做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 关系