0

I am trying to import a json array into arangodb using the http api from various node modules like needle, http, request. Each time i get the following error or similar:

{ error: true,
  errorMessage: 'expecting a JSON array in the request',
  code: 400,
  errorNum: 400 }

The code is below (similar for most modules listed above with minor variations). Various scenarios (single document import, etc.) all seem to point to the post body not being correctly recognized for some reason.

var needle = require('needle');

var data = [{
    "lastname": "ln",
    "firstname": "fn",
},
{
    "lastname": "ln2",
    "firstname": "fn2"
}];

var options = {  'Content-Type': 'application/json; charset=utf-8'  };


needle.request('POST', 'http://ip:8529/_db/mydb/_api/import?type=array&collection=accounts&createCollection=false', data, options,     function(err, resp) {
    console.log(resp.body);
});

While i am able to upload the documents using curl and browser dev tools, I have not been able to get it working in node.js. What am i doing wrong? This is driving me crazy. Any help would be appreciated. Thank you very much.

1 Answer 1

2

You can use ngrep (or wireshark) to quickly find out whats wrong:

ngrep -Wbyline port 8529 -d lo
T 127.0.0.1:53440 -> 127.0.0.1:8529 [AP]
POST /_db/mydb/_api/import?type=array&collection=accounts& createCollection=true HTTP/1.1.
Accept: */*.
Connection: close.
User-Agent: Needle/0.9.2 (Node.js v1.8.1; linux x64).
Content-Type: application/x-www-form-urlencoded.
Content-Length: 51.
Host: 127.0.0.1:8529.
.
##
T 127.0.0.1:53440 -> 127.0.0.1:8529 [AP]
lastname=ln&firstname=fn&lastname=ln2&firstname=fn2

The body to be sent to ArangoDB has to be json (as you try to achieve by setting the content type). Making needle to actualy post json works this way: (see https://github.com/tomas/needle#request-options )

var options = {
    Content-Type: 'application/json; charset=utf-8',
    json: true
};

which produces the proper reply:

{ error: false,
  created: 2,
  errors: 0,
  empty: 0,
  updated: 0,
  ignored: 0 }
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.