【问题标题】:How to get request from a Google Calendar API on a Hugo site in a Netlify lambda function如何在 Netlify lambda 函数中从 Hugo 网站上的 Google Calendar API 获取请求
【发布时间】:2019-07-10 05:24:07
【问题描述】:

我正在尝试向 Netlify lambda function 内的 Google Calendar API 发出获取 Hugo 站点的请求,但如果没有我无法使用的 Node,我将无法这样做。

我尝试使用 fetch,XMLHttpRequest,为此我尝试使用 zip-it-and-ship -it 但它不起作用,我无法让任何节点模块工作,因为该站点不是使用 Node.js 制作,但使用 Hugo。

exports.handler = (event, context, callback) => {
    var fetch = require("node-fetch");
    var makeQuerystring = params =>
        Object.keys(params)
        .map(key => {
            return encodeURIComponent(key) + "=" + encodeURIComponent(params[key]);
        })
        .join("&");

    var url = "https://www.googleapis.com/calendar/v3/calendars/calendarid/events";
    var querystring = makeQuerystring({
        q: "Makerspace"
    });
    var today = new Date();

    var yearRn = today.getFullYear();
    var monthRn = today.getMonth()+1;
    var dayRn = today.getDate();
    var hoursRn = today.getHours();
    var minutesRn = today.getMinutes();
    var datetime = new Date(yearRn, monthRn, dayRn, hoursRn, 00,00);
    var indexarray = [];
    fetch(url + "?" + querystring, {
        method: "get",
        headers: {
        Authorization: "Bearer " + {{APIKEY}}
        }
    })

    callback(null, {
        statusCode: 200,
        body: resObj,
      });
  };

我期望得到一个包含一堆事件的对象,然后我可以使用它然后通过回调将它带到网站上。但我实际上没有从 api 得到响应,因为请求从未被发出:“错误:找不到模块'node-fetch'”。回调按我的测试工作。

【问题讨论】:

    标签: javascript lambda google-calendar-api hugo netlify


    【解决方案1】:

    如果这些依赖项尚未包含在节点中,则将模块与您的函数捆绑在一起。在这种情况下,您必须将 node-fetch 与您的函数捆绑在一起。

    您的捆绑包需要有一个现有的模块。您可以通过两种方式在项目中执行此操作:

    • 从函数目录中带上 node_modules 依赖项
    • 使用捆绑程序(如 webpack)将模块预构建到脚本中并以节点构建为目标

    这些可能看起来需要做很多工作,但在大多数情况下,它比看起来要简单。

    @philhawksworth 显示了一个函数的初始存储库中的示例,该函数使用上述第一种方法,npm install 使用 node-fetch here 的本地 package.json 配置。然后将结果存储到存储库中,以便 Netlify 可以在创建函数时提取它们。不需要预先构建。

    第二个选项将使用与 this repository 相同的方法,其中您的函数存在于源位置并使用 netlify-lambda cli 捆绑到分发位置。

    注意: 将每个函数目录视为一个独立的脚本,将在其自己的节点实例中运行而无需安装任何节点模块。该函数需要在部署之前将所有依赖项安装到其目录中。以上两种情况均符合此要求。

    【讨论】:

    • 我已经完全按照第一个变体中的方式完成了,但它仍然无法正常工作并显示相同的错误。我不知道如何做第二个变体,所以我又被卡住了,我想知道是否有什么我可能做错了,即使它与链接的存储库相同?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 2022-01-27
    • 2021-10-03
    相关资源
    最近更新 更多