web-dev-qa-db-ja.com

Google Cloud Functions(nodeJS)からHTTPリクエストを送信する方法

これはおそらく単純な質問ですが、私はクラウド機能/ノードプログラミングに不慣れで、適切なドキュメントがまだ見つかりません。

HTTPリクエストを受信し、HTTPリクエストを別のエンドポイントに送信するGoogleクラウド関数を作成するにはどうすればよいですか?たとえば、HTTPトリガーをクラウド関数に送信できます( https://us-central1-plugin-check-xxxx.cloudfunctions.net/HelloWorldTest )。プロジェクトの後半で、遅延を実装する方法を理解します。しかし、別のエンドポイント( https://maker.ifttt.com/trigger/arrive/with/key/xxxx )への新しいHTTPリクエストで応答したいと思います。それ、どうやったら出来るの?

exports.helloWorld = function helloWorld(req, res) {
  // Example input: {"message": "Hello!"}
  if (req.body.message === undefined) {
    // This is an error case, as "message" is required.
    res.status(400).send('No message defined!');
  } else {
    // Everything is okay.
    console.log(req.body.message);
    res.status(200).send('Success: ' + req.body.message);
    // ??? send a HTTP request to IFTTT endpoint here
  }
};
14
Mark Peterson

これが、Chetan Kanjaniの助けを借りてなんとか動作するようにしたコードです。 Google Cloud関数のエンドポイントにテキストメッセージを送信すると、IFTTT(別のエンドポイント)にテキストメッセージで応答します。

const request = require('request');

exports.helloWorld = function helloWorld(req, res) {
  // Example input: {"message": "Hello!"}
  if (req.body.message === undefined) {
    // This is an error case, as "message" is required.
    res.status(400).send('No message defined!');
  } else {
    // Everything is okay.
    console.log(req.body.message);

    request.get('https://maker.ifttt.com/trigger/arrival/with/key/xxxx', function (error, response, body) {
      console.log('error:', error); // Print the error if one occurred 
      console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received 
      console.log('body:', body); //Prints the response of the request. 
    });
    res.status(200).send("Success");
  }
};

また、package.jsonファイルを変更して、リクエストパッケージを含める必要がありました。それはすでにsample-httpパッケージを持っていました、私は依存関係を追加しました:

{
  "name": "sample-http",
  "version": "0.0.1",
  "dependencies": {
    "request": "^2.81.0"
  }
}

まだconsole.log関数がどこに情報を出力するのかわかりません。これは、将来のデバッグに役立つ可能性があります。

19
Mark Peterson

Requestモジュールはコールバックを使用します。代わりにJavaScript Promiseを使用する場合、Axiosモジュールは同等の機能を提供します。

4

古いですが、自分で検索しているときにこれに遭遇しました:

promiseサポート付きのリクエストモジュールは( request-promise )です

4
OtterJesus

https://www.npmjs.com/package/request モジュールを使用します。

var request = require('request');
request.get('https://maker.ifttt.com/trigger/arrive/with/key/xxxx', function (error, response, body) {
  console.log('error:', error); // Print the error if one occurred 
  console.log('statusCode:', response && response.statusCode); // Print the response status code if a response was received 
  console.log('body:', body); //Prints the response of the request. 
});
3
Chetan Kanjani