Strongloop Embeds未找到许多辅助方法

时间:2016-01-29 09:40:11

标签: javascript node.js loopbackjs strongloop

有些问题我无法在文档中找到答案。

我试图获得这样的结构:

 Node: 
   id: '1sdf12asd123',
   name: 'node1',
   history: 
      [ ts: 234234234234,
        data: { 'foo': 'bar' }
      ],
      ...

所以每个单独的节点都有很多历史项目。我希望能够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": {}
}

所以历史就是这样:

{
  "name": "History",
  "base": "PersistedModel",
  "idInjection": true,
  "properties": {
    "ts": {
      "type": "Date"
    },
    "data": {
      "type": "Object"
    }
  },
  "validations": [],
  "relations": {
    "node": {
      "type": "belongsTo",
      "model": "Node",
      "foreignKey": "NodeId"
    }
  },
  "acls": [],
  "methods": {}
}

我不确定foreignKey部分是否正确,但我尝试了很多不同的组合,而且这个组合似乎是合乎逻辑的。

历史模型不公开,因此不作为端点公开。我希望尽可能多地利用关系,而不是单独的终点。

这里的主要问题是我想使用Nodes.history.add(),如here所述。

但我已尝试过从Remote methodsOperation Hooks的所有不同方法,但我无法找到所提到的辅助方法。没有代码示例可以找到。

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

我想知道的事情:

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

1 个答案:

答案 0 :(得分:1)

如果我能正确理解您的问题,您可以改为Node hasMany History。然后使用从关系:

生成的所有方法

使用关系

创建新历史记录
POST api/Node/{NodeId}/Histories/ 

通过适当地编写JSON数据,您应该能够通过单个POST请求创建多个历史记录实例

{
    {
       ts: 26283829879
    },
    {
       ts: 5335329923
    }
}

从节点获取单个历史记录

GET api/Node/{NodeId}/Histories/{HistoryId}/

您还可以从节点获取所有历史记录,编辑给定节点的任何历史记录等。

这有用吗?

请参阅HasMany relations的StrongLoop文档。