Firebase 的云函数 - getaddrinfo ENOTFOUND

Posted

技术标签:

【中文标题】Firebase 的云函数 - getaddrinfo ENOTFOUND【英文标题】:Cloud Functions for Firebase - getaddrinfo ENOTFOUND 【发布时间】:2019-08-13 09:17:55 【问题描述】:

尝试使用 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)

我尝试过的事情:

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

有什么问题?

【问题讨论】:

【参考方案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】:

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

【讨论】:

以上是关于Firebase 的云函数 - getaddrinfo ENOTFOUND的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 的云函数:增量计数器

Firebase 的云函数:序列化 Promise

Firebase 异步等待风格的云函数

使用 Firebase CLI shell 测试可调用的云函数

防止滥用:Firebase 的云功能

如何使用以 TypeScript for Firebase Realtime 数据库编写的云函数从 onCreate 触发以外的节点获取数据?