2013-10-15 14 views
10

Mein Code versucht, Daten von meinem lokalen Node.js-Server an eine Coldfusion-API zu senden. Ich habe es geschafft, mit der API zu kommunizieren und mich über die Anforderungsheader zu authentifizieren. Jedoch habe ich Schwierigkeit, mein JSON-Objekt tatsächlich zu übergeben, weil ich die Struktur nicht richtig bekommen kann.Verschachtelte Objekte in Abfragezeichenfolge verschicken - Node.js

Die API akzeptiert die JSON-Option des Request-Moduls nicht, so dass dies meine einfachste Option außerhalb des Fensters ist.

Die API erwartet Folgendes:

{ 
    'source': { 
     'customer': { 
      'customerlogin': 'myusername', 
      'customerpassword': 'mypassword', 
     } 
    } 
} 

mein Code funktioniert, wenn ich hart Code der folgenden Körperparameter (von einem erfolgreichen Beitrag von jemand anderem) in meinem Beitrag.

var Jrequest = require('request'); 

var options = { 
    uri: 'http://myAPI/customerSSO.json', 
    headers: {'Content-Type': 'application/x-www-form-urlencoded', 'Authorization': something', 'Timestamp': timestamp}, 
    method: 'POST', 
    body: 'source=%7B%0D%0A++%22customer%22%3A+%7B%0D%0A++++%22customerlogin%22%3A+%22myusername%22%2C%0D%0A++++%22customerpassword%22%3A+%22mypassword%22%2C%0D%0A%09%22success%22%3A+%22%22%0D%0A++%7D%0D%0A%7D' // Working 
}; 


Jrequest(options, function (error, response, body){ 
    res.send(body); 
}); 

Wenn ich die JSON durch auf andere Weise, zum Beispiel JSON.stringify() senden, wird es mit der Begründung abgelehnt, dass ‚Quelle erforderlich ist, aber nicht definiert‘.

So nehme ich meine Frage ist, in node.js wie kann ich JSON verwandeln sich in etwas, das wie dieses übersehen ich sieht

'source=%7B%0D%0A++%22customer%22%3A+%7B%0D%0A++++%22customerlogin%22%3A+%22myusername%22%2C%0D%0A++++%22customerpassword%22%3A+%22mypassword%22%2C%0D%0A%09%22success%22%3A+%22%22%0D%0A++%7D%0D%0A%7D' 

oder haben eine andere Wahl?

Vielen Dank für jede Hilfe und Entschuldigung, wenn ich falsche Terminologie verwendet habe.

Antwort

4

ich denke, das sollte funktionieren:

var querystring = require('querystring'); 
... 
request({ 
    ... 
    headers : { 'Content-Type': 'application/x-www-form-urlencoded', ... }, 
    body : 'source=' + querystring.escape(JSON.stringify({ 
    'customer': { 
     'customerlogin': 'myusername', 
     'customerpassword': 'mypassword', 
    } 
    })), 
    ... 
}, ...) 

Ihr Beispiel enthält auch Zeilenumbrüche und Zeilenumbrüche und so, aber ich gehe davon aus denen optional sind.

+0

Das ist perfekt, vielen Dank. – Longshot

+1

Eine andere Option ist die Verwendung von 'encodeURIComponent' anstelle des' querystring' Moduls. Ich bin mir nicht sicher, ob es Vor- oder Nachteile gibt für was auch immer - wahrscheinlich nur gleichwertig. Ah, nur .toStringered die Querystring-Methode und habe 'function (str) {return encodeURIComponent (str); } '- kein Unterschied dann :) – Pebbl

+1

@pebbl duh, dachte nicht einmal daran :) sollte gut funktionieren, denke ich. – robertklep

Verwandte Themen