2013-10-15 10 views
10

私のコードは、ローカルのNode.jsサーバーからColdfusion APIにデータをポストしようとしています。私はAPIと通信し、リクエストヘッダーを通して自分自身を認証することができました。しかし、構造体を正しく取得できないため、JSONオブジェクトを実際に渡すのが難しいです。クエリ文字列内のネストされたオブジェクトをポストする - Node.js

APIはリクエストモジュールのJSONオプションを受け入れないため、これは私の最も簡単なオプションです。

APIには、次のことを期待している:

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

私はハード私のポストに(他の誰かによって成功でポストから)以下の身体パラメータをコーディングした場合、私のコードは動作します。

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

Iは、例えば、json.stringifyのための他の方法、(経由JSONを送信する場合)、それは「ソースが必要ですが定義されていない」という理由で拒否されます。

だから、私はこの

'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' 

のように見えるものにJSONを回すか、または私は別のオプションを見落としているかのNode.jsで、私の質問があると仮定しますか?

誤った用語を使用した場合は、何か助けて謝罪してくれてありがとう。私は、これは動作するはずだと思う

答えて

4

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

あなたの例では、改行やキャリッジリターンなどが含まれていますが、私はそれらがオプションであると仮定しています。

+0

これは完璧です、ありがとうございます。 – Longshot

+1

別のオプションは、 'querystring'モジュールの代わりに' encodeURIComponent'を使用することです。いずれかの賛否両論があるかどうかは分かりません。ああ、ちょうど.QueryStringメソッドを呼び出し、 'function(str){return encodeURIComponent(str);}を取得しました。 } ' - それでは違いはありません:) – Pebbl

+1

@pebbl duhは、それについても考えていませんでした。私はうまく動くはずです。 – robertklep

関連する問題