web-dev-qa-db-ja.com

Node.jshttps.postリクエスト

Node.jsを使用していて、特定のデータを含むPOSTリクエストを外部サーバーに送信する必要があります。GETでも同じことをしていますが、これははるかに簡単です。追加のデータを含める必要があります。したがって、作業中のGETリクエストは次のようになります。

var options = {
    hostname: 'internetofthings.ibmcloud.com',
    port: 443,
    path: '/api/devices',
    method: 'GET',
    auth: username + ':' + password
};
https.request(options, function(response) {
    ...
});

だから私はPOSTリクエストで同じことをする方法を考えていました、次のようなデータを含みます:

type: deviceType,
id: deviceId,
metadata: {
    address: {
        number: deviceNumber,
        street: deviceStreet
    }
}

上記のオプションにこのデータを含める方法を教えてもらえますか?前もって感謝します!

6
Nhor

Optionsオブジェクトには、GETリクエストで行ったようにリクエストオプションを含め、POSTの本文に必要なデータを含むもう1つのオブジェクトを作成します。クエリ文字列関数(npm install querystringでインストールする必要があります)を使用して文字列化し、https.request()のwrite()メソッドとend()メソッドを使用して転送します。

ポストリクエストを成功させるには、optionsオブジェクトに2つの追加ヘッダーが必要であることに注意することが重要です。これらは :

'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': postBody.length

したがって、querystring.stringifyが返された後で、オプションオブジェクトを初期化する必要があります。そうしないと、文字列化された本文データの長さがわかりません。

var querystring = require('querystring')
var https = require('https')


postData = {   //the POST request's body data
   type: deviceType,
   id: deviceId,
   metadata: {
      address: {
         number: deviceNumber,
         street: deviceStreet
      }
   }            
};

postBody = querystring.stringify(postData);
//init your options object after you call querystring.stringify because you  need
// the return string for the 'content length' header

options = {
   //your options which have to include the two headers
   headers : {
      'Content-Type': 'application/x-www-form-urlencoded',
      'Content-Length': postBody.length
   }
};


var postreq = https.request(options, function (res) {
        //Handle the response
});
postreq.write(postBody);
postreq.end();
7
Dimitris P.