【问题标题】:How to fetch a URL with Google Cloud functions? request?如何使用 Google Cloud 功能获取 URL?要求?
【发布时间】:2019-06-13 23:14:23
【问题描述】:

我将 Google Apps 脚本用于

var response = UrlFetchApp.fetch(url, params);

从 api 获得响应。遗憾的是,我需要使用 Drive 中的 Google Apps 脚本处理太多的请求和太多的数据

我现在的想法是切换到谷歌云功能和请求,但它不起作用。

const request = require('request');

const headers = {
    "Authorization" : "Basic " + Buffer.from('blabla').toString('base64')
};

const params = {
    "method":"GET",
    "headers":headers
};

exports.getCheckfrontBookings = (req, res) => {
  let url = 'https://fpronline.checkfront.com/api/3.0/item'

  request({url:url, qs:params}, function(err, response, body) {
    if(err) { console.log(err); return; }
    console.log("Get response: " + response.statusCode);
  });

【问题讨论】:

  • 你不能从这样的回调中返回值。
  • 即使没有退货也可以。 require('request') 在 Google 云函数中不起作用?
  • “不起作用”具体是什么意思?您是否看到错误消息?
  • 详细堆栈跟踪:错误:找不到模块“请求”

标签: node.js google-cloud-functions


【解决方案1】:

request 原生支持回调接口,但不返回 Promise,这是您必须在 Cloud Function 中执行的操作。

您可以使用 request-promise (https://github.com/request/request-promise) 和 rp(...) 方法“返回符合常规 Promises/A+ 的承诺”,然后执行以下操作:

const rp = require('request-promise');

exports.getCheckfrontBookings = (req, res) => {

  var options = {
    uri: 'https://fpronline.checkfront.com/api/3.0/item',
    headers: {
      Authorization: 'Basic ' + Buffer.from('blabla').toString('base64')
    },
    json: true // Automatically parses the JSON string in the response
  };

  rp(options)
    .then(response => {
      console.log('Get response: ' + response.statusCode);
      res.send('Success');
    })
    .catch(err => {
      // API call failed...
      res.status(500).send('Error': err);
    });
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-09
    • 2018-06-17
    • 2019-02-06
    • 2019-05-31
    • 1970-01-01
    • 2022-01-17
    • 2021-01-11
    • 2021-12-26
    相关资源
    最近更新 更多