2015-06-22 100 views
0

我試圖使用來自各種節點模塊(如針,http,請求)的http api將json數組導入arangodb。每次我得到以下錯誤或類似:使用node.js通過http api導入Arangodb

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

的代碼是下面(類似於上面有少許變化中列出的大多數模塊)。各種情況(單個文檔導入等)似乎都指向由於某種原因未正確識別的帖子主體。

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); 
}); 

雖然我能夠使用curl和瀏覽器開發工具上傳文檔,但我一直無法在node.js中使用它。我究竟做錯了什麼?這真讓我抓狂。任何幫助,將不勝感激。非常感謝你。

回答

2

可以使用的ngrep(或Wireshark的),以快速查找出什麼錯:

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 

身體被髮送到ArangoDB已經是JSON(當你試圖通過設置內容類型來實現)。 使針actualy後JSON以這種方式工作:(見https://github.com/tomas/needle#request-options

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

產生正確的回答是:

{ error: false, 
    created: 2, 
    errors: 0, 
    empty: 0, 
    updated: 0, 
    ignored: 0 }