使用node.js在arangoDB中创建文档

4

如何正确传递JSON文档进行创建?

我已经有以下工作正常的示例: /* 在集合中创建一个新文档 */

db.document.create({a:"test"},function(err,ret){
if(err) console.log("error(%s): ", err,ret);
else console.log(util.inspect(ret));
});

但是我该如何将json作为参数传递,因为这种方法行不通?
var json = '{a:"test"}';

db.document.create(json,function(err,ret){
if(err) console.log("error(%s): ", err,ret);
else console.log(util.inspect(ret));

});

2个回答

4

看一下Kaerus存储库中的“create”功能,它是:

"create": function() {
  var collection = db.name, data = {}, options = "", callback, i = 0;
  if(typeof arguments[i] === "boolean"){ 
    if(arguments[i++] === true)
      options = "&createCollection=true";
  } 
  if(typeof arguments[i] === "string") collection = arguments[i++];
  if(typeof arguments[i] === "object") data = arguments[i++];
  if(typeof arguments[i] === "function") callback = arguments[i++];
  return X.post(xpath+collection+options,data,callback);
},

所以你需要将它作为 JavaScript 对象传递,也就是调用

JSON.parse('{"a":"test"}')

将JSON表示转换为JavaScript对象或对Kaerus客户端进行修补,以允许在行中使用对象或字符串。

if(typeof arguments[i] === "object") data = arguments[i++];

(这可能会导致可选参数出现问题)。

注意:无论如何,重要的是“json”包含有效的JSON表示形式。

{ a: "Test" }

不是有效的,

{ "a": "Test" }

是。


我的数据在一个流中,所以它是一个缓冲区。我将其转换为字符串,然后对其进行了JSON.parse。这不起作用,我得到了一个“404”响应。JSON是有效的(在此处测试的缓冲区的'console.log'输出:http://jsonlint.com/)。如果我直接传入数据,它可以正常工作...非常令人困惑... - user1305541
好的,这很奇怪。404并不意味着“损坏的JSON”,而是“未找到集合”。您可以尝试以下操作:db.document.create(“COLLECTIONNAME”,json,function(err,ret){ if(err)console.log(“error(%s):”,err,ret); else console.log(util.inspect(ret));其中COLLECTIONNAME是您正在使用的集合的名称? - fceller
我已经尝试过了,404错误已经解决了。它正在创建一个文档,但没有传入的JSON数据,只有_id、_key和_rev字段被填充。'create'的回调函数没有被调用,因此两个控制台行没有输出。 - user1305541

2

谢谢,我有了一个灵感!我正在使用流数据调用arango客户端函数,这将是一个缓冲区,并且我已经将其转换为字符串,显然不被接受,正如您的评论所述。我想我需要知道的是,如何从字符串(或缓冲区)转换为您建议的格式。 - user1305541
JSON.parse(yourJsonString); 是什么意思? - herrjeh42

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接