2013-04-01 1 views
4

Quelle est la bonne façon de passer des documents json pour la création?Créer un document dans arangoDB avec node.js

J'ai l'exemple de travail et ok comme ci-dessous: /* créer un nouveau document dans la collection */

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

mais comment puis-je passer dans le JSON comme argument que cela ne fonctionne pas?

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

});

Répondre

2

Jetez un oeil à ce test unitaire: https://github.com/kaerus/arango-client/blob/master/test/api/document.js

Essayez

var json = {"a":"test"}; 
+0

Merci, j'ai fait un remue-méninges! J'appelle la fonction client arango avec des données de flux qui seront un tampon et je l'ai traduit en une chaîne qui n'est clairement pas acceptée, selon votre commentaire. Je suppose que ce que je dois savoir, c'est comment obtenir une chaîne (ou un tampon) au format que vous avez suggéré. – user1305541

+0

Qu'en est-il JSON.parse (yourJsonString); ? – herrjeh42

4

En regardant le "créer" fonction du référentiel Kaerus ci-dessus, la fonction de création est:

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

Alors vous devez soit le passer en tant qu'objet JavaScript, c'est-à-dire appeler

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

pour convertir une représentation JSON à un objet JavaScript ou correctif Kaerus client pour permettre à un objet ou une chaîne dans la ligne

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

(cela pourrait conduire à des problèmes avec les arguments optionnels).

REMARQUE: Dans tous les cas, il est important que "json" contienne une représentation JSON valide.

{ a: "Test" } 

est pas valide,

{ "a": "Test" } 

est.

+0

Mes données sont dans un flux, donc c'est un tampon. J'ai converti cela en une chaîne et j'ai ensuite fait un JSON.parse dessus. Cela ne fonctionne pas, je reçois une réponse '404'. le JSON est valide (la sortie d'un 'console.log' sur le tampon testé ici: http: //jsonlint.com/). Si je passe les données directement ça marche bien ... très déroutant ... – user1305541

+0

Ok, c'est étrange. 404 ne signifie pas "JSON corrompu", mais "collection non trouvée". Pouvez-vous essayer ce qui suit: db.document.create ("COLLECTIONNAME", json, fonction (err, ret) { si (erreur) console.log ("erreur (% s):", err, ret); else console.log (util.inspect (ret)); où COLLECTIONNAME est le nom de la collection que vous utilisez? – fceller

+0

J'ai essayé et l'erreur 404 est corrigée, c'est la création d'un document mais sans les données json passées , je n'ai que les champs _id, _key et_rev, le callback de 'create' n'est pas appelé donc il n'y a pas de sortie des 2 lignes de la console. – user1305541

Questions connexes