【问题标题】:Cloud Functions for Firebase - getaddrinfo ENOTFOUNDFirebase 的云函数 - getaddrinfo ENOTFOUND
【发布时间】:2024-01-23 17:00:01
【问题描述】:

尝试使用 PayPal-node-SDK 向 Paypal 的 API 发出请求

exports.requestPayment = functions.https.onRequest((req, res) => {
    return new Promise(function (fullfilled, rejected) {
        paypal.payment.create(create_payment_json, {}, function (error, payment) {
            if (error) {
                rejected(error);
            } else {
                console.log("Create Payment Response");
                console.log(payment);
                res.status(200).send(JSON.stringify({
                    paymentID: payment.id
                })).end();
                fullfilled(payment);
            }
        });
     });
});

但我经常遇到错误:

Error: getaddrinfo ENOTFOUND api.sandbox.paypal.com api.sandbox.paypal.com:443
    at errnoException (dns.js:28:10)
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26)

我尝试过的事情:

  1. 向完全不同的主机发出请求,仍然是ENOTFOUND
  2. cors(req,res, ()=>{...})包装请求
  3. 在主机前添加https://

有什么问题?

【问题讨论】:

    标签: node.js firebase paypal dns google-cloud-functions


    【解决方案1】:

    您需要使用付费计划才能发出外部 API 请求。

    Firebase 的 Blaze 计划(即用即付)为 Cloud Functions 提供免费配额。 https://firebase.google.com/pricing/

    【讨论】:

    • 您应该在函数日志中看到警告 + 它可能隐藏在定价页面的某个地方。顺便说一句,我是 Firebase 的 Cloud Functions 开发人员;)
    • 脚注 3:Spark 计划仅允许对 Google 拥有的服务的出站网络请求。在 Blaze 计划中,Cloud Functions 提供永久免费层。
    • 感谢您的详细信息!真的很感激。一旦我拿出我的信用卡,它就按预期工作了!
    • 这为我节省了额外一两个小时的调试时间。谢谢!
    • 对托管在另一个项目的云功能上的 api 的调用是否相同?当我对https://us-central1-joanne-lee.cloudfunctions.net/getUrls/portrait进行同构提取时,我收到getaddrinfo ENOTFOUND 错误
    【解决方案2】:

    在我的情况下,我不得不等待,让曾经发生的延迟过去。现在又好了。

    【讨论】:

      【解决方案3】:

      您需要在管理员初始化中包含服务帐户。这为我解决了同样的问题

      【讨论】:

      • 网络连接中的某些延迟也会导致此问题
      • 是的。我第一次遇到这个错误。当我阅读此评论时,第二次它没有任何变化。 :)
      【解决方案4】:

      在产生任何费用之前切换到 Firebase“Blaze”计划,其中包括 free usage tier of the Spark plan。使用Blaze pricing calculator 查看给定使用量您需要支付的费用。

      前 5GB 出站(出口)网络是免费的,这与“原生”Google Cloud Functions would give you 相同。

      【讨论】:

        【解决方案5】:

        我遇到这个问题是因为网络太弱,请更改网络连接。

        【讨论】: