环回推送阵列

时间:2016-02-05 11:44:31

标签: javascript node.js loopbackjs strongloop

如何制作更新/推送的自定义remoteMethod不会覆盖,属性为array。 所以基本上push数据到模型的数组属性。

除了.add()辅助方法之外,我无法在文档中找到任何明确的示例,但这需要embedsOne或其他关系。

但是,如果我在整个应用中都有 Model,并希望将push某些数据发送到id,该怎么办? 最后得到一个端点,如:

POST /Thing/{id}/pushData

POST的身体将是:

  {
     id: "foo",
     data: "bar"
   }

(或者最好没有id,并且id autoInserted,因为它是一个数组,我不需要每个项目的ID, data部分应该可以使用filters / where)进行搜索。

到目前为止,我有:

  Thing.remoteMethod (
      'pushData',
      {
        isStatic: false,
        http: {path: '/pushData', verb: 'post'},
        accepts: [
          { arg: 'data', type: 'array', http: { source: 'body' } }
        ],
        returns: {arg: 'put', type: 'string'},
        description: 'push some Data'
      }
  );

  Thing.prototype.pushData = function(data, cb) { 
    data.forEach(function (result) {
      // ??
    });
    cb(null, data)
  };

据我所知,默认端点只允许添加单个实例,但我想批量更新。

1 个答案:

答案 0 :(得分:1)

你已经使你的方法非静态,这很好。

现在,如果您的数组属性被称为MyArray,我会尝试以下方式:

  Thing.remoteMethod (
      'pushData',
      {
        isStatic: false,
        http: {path: '/pushData', verb: 'post'},
        accepts: [
          { arg: 'data', type: 'array', http: { source: 'body' } }
        ],
        returns: {arg: 'put', type: 'string'},
        description: 'push some Data'
      }
  );

  Thing.prototype.pushData = function(data, cb) {
    thingInstance = this; 
    data.forEach(function (result) {
       thingInstance.MyArray.push(result.data);
    });

    cb(null, data)
  };

由于您的远程方法是非静态的,因此您应该能够使用this访问该实例。我怀疑您是否可以通过撰写this.someProperty来直接访问该属性,请尝试并告诉我这是否有用。

然后要批量创建,只需向远程

发出标准POST请求
POST /Thing/{id}/pushData

只需像这样编写你的JSON

{
   {
       data: "bar"
   },
   {
       data: "foo"
   },
   //etc
}

这应该在数组属性中添加两个元素。

如果这有用,请告诉我