2016-09-15 17 views
0

私はノードコンソールアプリケーションを持っています。私のアプリケーションでは、私はサードパーティのWebサービスにいくつかのデータを送信しようとしています。私は正常にPOSTMAN経由でサードパーティWebサービス経由でデータを追加できます。Node.js +サードパーティサービスへのAPIリクエストの送信

ヘッダ

api-key 
{my key} 

Content-Type 
application/json 

ボディ、私は今、ノードを介して、このデータを送信して複製しようとしています

{ 
    "value": [ 
    { 
     "@operation": "send", 
     "id":"1", 
     "name":"Hello", 
     "position": { "type": "Point", "coordinates": [90.000000, 0.000000] }, 
     "tags":["january", "friends"] 
    } 
    ] 
} 

:私の郵便配達で、私はこのような要求を設定しています。これを実行しようとする試みで、私は次のように書いている:

var ops = { 
    host: 'example.com', 
    path: '/api/upload?version=2', 
    method: 'POST', 
    headers: { 
    'api-key':'[my key]', 
    'Content-Type': 'application/json' 
    } 
}; 

var r = https.request(ops, (res) => { 
    res.on('data', (d) => { 
    console.log(res.statusCode); 
    console.log(res.statusMessage); 
    }); 
}); 

var data = { 
    "value": [ 
    req.body.record // req is passed in via express 
    ] 
}; 
console.log(data); 

r.write(JSON.stringify(data)); 
r.end(); 

ラインconsole.log(data);が実行されると、私はコンソールウィンドウに以下を参照してください。

{ value: 
    [ { '@operation': 'send', 
     id: '1', 
     name: 'Hello', 
     position: [Object], 
     tags:[Object] 
    } ] } 

私がもしわかりませんこれは印刷上の問題または実際の問題です。いずれにせよ、私の本当の問題は、私がリクエストを送信すると、コンソールウィンドウに次のものも表示されることです:

400 
Bad Request 

そのデータは正しいように見えます。 Nodeから送信しようとすると、なぜ私が400を得ているのかわかりません。それでも、それはPostmanからうまく動作します。それは引用符と関係がありますか?私はJSON.stringifyがそれを処理したと思った。

私は間違っていますか?

答えて

2

本当に良い理由がない限り、正直言って、requestのようなものを使用してください。それはあなた自身でそれを構築しようとするより簡単/清潔です。

あなたが話しているAPIが予期していることを知らなくても、私は具体的に答えられません。

また、res.on('data')では、ちょうどconsole.log(req);とそこに隠れているものがあります。既存のコードでこれを解決するのに役立ちます。

+0

私が間違っている場合は私を修正しますが、それは400人なので、私の側のエラーを意味しません。この場合、APIは重要ではありませんか?あるいは私は400について何かを誤解しています。 –

+0

投稿しているデータがAPIが期待しているものではない(おそらく)ため、APIから400を受け取っています。レスポンス(恐らく 'response.body')には詳細がありますので、そこにあるものを見てください。これはあなたのためにこれを解決するのに役立ちます。 – floatingLomas

0

私は

console.log(JSON.stringify(data)); 

代わりの

console.log(data); 

、その後は間違っているかを決定しようとするだろう。これはサーバーに送信される方法で私に完全なデータを与えます。

更新: 私は、迅速な実験を行い、次の出力を受けています

{"value":[{"@operation":"send","id":"1","name":"Hello","position":{"type":"Point","coordinates":[90,0]},"tags":["january","friends"]}]} 

元JSONとの違いは、がWebサービスに送信されている座標どのような方法である(整数として)、あなたの問題になる可能性があります。

+0

これは調査に全く情報を追加しません。 – floatingLomas

+0

です。 console.log(data)はオブジェクトをダンプします。位置やタグなどの要素は「[Object]」として出力されます。あなたはこのオブジェクトにあなたが持っているものと、このオブジェクトがどのようにストリング化されるのかは分かりません。 console.log(JSON.stringify(data))が使用されている場合、その場合、サービスに送信される実際の文字列がログに記録されます。 POSTMANで動作するものと比較することができます。 HTTPエラー400は「不正な要求」を意味することに注意してください。ほとんどの場合、要求データは正しくありません(形式が誤っています)。 POSTMANとノードの両方のヘッダーは同じように見えるので、違いは本文のどこかにあります。 –

+0

あなたはそうです。私の悪い。 – floatingLomas

関連する問題