繁体   English   中英

如何从 Google Cloud Functions (nodeJS) 发送 HTTP 请求

[英]How to send a HTTP request from Google Cloud Functions (nodeJS)

这可能是一个简单的问题,但我是云函数/节点编程的新手,还没有找到正确的文档。

如何编写将接收 HTTP 请求但随后将 HTTP 请求发送到不同端点的 Google 云函数? 例如,我可以将 HTTP 触发器发送到我的云函数 ( https://us-central1-plugin-check-xxxx.cloudfunctions.net/HelloWorldTest )。 在项目的后期,我将弄清楚如何实现延迟。 但是我想用一个新的 HTTP 请求响应另一个端点( https://maker.ifttt.com/trigger/arrive/with/key/xxxx )。 我该怎么做?

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

这是我在 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 函数在哪里打印出信息。 这可能对未来的调试有帮助。

旧的,但我在搜索自己时遇到了这个:

具有承诺支持的请求模块是( request-promise

使用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. 
});

Request 模块使用回调。 如果您想改用 JavaScript 承诺,Axios 模块提供了等效的功能。

下面的代码有效。 不确定 Axios 是否是此类简单请求的理想模块,但 Google Cloud Function 文档使用 Axios,因此也使用 Axios 似乎很明智。 其他答案使用request模块,但它已于 2020 年 2 月弃用。

注意:GCF 目前不原生支持 ES6。 ES6 支持随 Node 13 一起提供。

包.json

{
  "name": "YOUR_NAME",
  "version": "0.0.1",
  "dependencies": {
    "axios": "^0.19.2"
  }
}

索引.js

/**
 * Required Modules
 */
const axios = require("axios");


/**
 * Responds to any HTTP request.
 *
 * @param {!express:Request} req HTTP request context.
 * @param {!express:Response} res HTTP response context.
 */
exports.run = async(req, res) => {
  // Set API end point.
  let apiURL = YOUR_URL;

  // Wrap API parameters in convenient object.
  let apiData = {
    PARAM_1: PARAM_DATA,
    PARAM_2: PARAM_DATA
  };

  // Invoke API.
  axios.post(apiURL,
    JSON.stringify(apiData)
  )
  .then((response) => {
    res.status(200).send(response.data);
    console.log(response);
  }, (error) => {
    res.status(500).send(response.data);
    console.log(error);
  });
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM