Loopback:通过ajax POST一个对象数组

时间:2016-07-05 08:22:51

标签: jquery ajax node.js loopbackjs

我正在努力解决使用ajax的Loopback问题。我尝试通过jQuery函数.ajax() POST一个对象数组,但我根本就不能。服务器总是向我发送422错误(不可处理的实体)。

奇怪的是:我可以使用GUI资源管理器或命令行执行完全相同的请求。

我有两种型号:Nemo&通过hadMany / belongsTo关系关联的PendingUpdates(我将它们截断为更具可读性):

// nemo.json
{
  "name": "Nemo",
  "base": "PersistedModel",
  "properties": {
    "id": {
      "type": "Number",
      "id": true,
      "required": false,
      "generated": true
    }
  },
  "relations": {
    "pendingUpdates": {
      "type": "hasMany",
      "model": "PendingUpdate",
      "foreignKey": "nId"
    }
  }
}

// pending-update.json
{
  "name": "PendingUpdate",
  "base": "PersistedModel",
  "properties": {
    "id": {
      "type": "Number",
      "id": true,
      "required": false,
      "generated": true
    },
    "nId": {
      "type": "Number",
      "required": true
    },
    "parameter": {
      "type": "String",
      "required": false
    },
    "requestType": {
      "type": "Number",
      "required": true
    }
  },
  "relations": {
    "nemo": {
      "type": "belongsTo",
      "model": "Nemo",
      "foreignKey": "nId"
    }
  }
}

这就是事情:我尝试POST一组pendingUpdates。使用strongloop资源管理器,我只需POST:在/Nemos/{id}/pendingUpdates上,ID为:2,数据为[{"requestType": 3, "parameter": "stuff"}, {"requestType": 2, "parameter": "otherStuff"}]。我有一个200响应代码,包含正文中创建的对象。

但是,当我尝试使用jQuery发送完全相同的请求客户端时,我得到了422。

以下是片段:

var data = [
            {"requestType": 3, "parameter": "stuff"}, 
            {"requestType": 2, "parameter": "otherStuff"}
        ];
$.ajax("/api/Nemos/2/pendingUpdates?access_token=xxxxxxxxx", {
        data: data,
        headers: {
            Accept: "application/json",
            contentType: "application/json"
        },
        method: "POST"
    }).done(success)
    .fail(fail);

我尝试直接使用data{data}{"data": data}JSON.stringify({"data": data})JSON.stringify(data) ......

有人可以帮助我吗?

非常感谢,

Bjorge

1 个答案:

答案 0 :(得分:1)

好的,经过一天用控制台和WireShark做事后,我发现了什么问题;我在这里写下答案,以帮助处理同样问题的未来人。

  • 首先,正如我在评论中所假设的那样,麻烦并非来自LoopBack会误解发送给它的数据,而是来自jQuery:POST请求已发送,但没有任何数据。
  • 然后,我设法发送了一个正确的POST请求(即使用JSON对象,而不是数组)。我能够看到有两个Content-Type标题。我改变了我的功能,只发送一个。
  • 最后,我能够使用以下代码正确运行请求:

var data = [
            {"requestType": 3, "parameter": "stuff"}, 
            {"requestType": 2, "parameter": "otherStuff"}
        ];
$.ajax("/api/Nemos/2/pendingUpdates?access_token=xxxxxxxxx"), {
        data: JSON.stringify(data),
        accept: "application/json",
        contentType: "application/json",
        method: "POST"
    }).done(success)
    .fail(fail);

我希望将来可以帮助某人。