Firebase的云函数 - getaddrinfo ENOTFOUND

61

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

问题是什么?

5个回答

127

您需要订阅付费计划才能进行外部API请求。

Firebase的Blaze计划(按量付费)提供了免费的Cloud Functions分配额。 https://firebase.google.com/pricing/


3
你应该在函数日志中看到警告信息,而且这些信息可能会被埋没在定价页面的某个角落中。顺便说一句,我是 Firebase 云函数的开发者关系人员 ;) - James Daniels
2
注3:Spark计划仅允许对Google拥有的服务进行出站网络请求。在Blaze计划中,Cloud Functions提供了永久的免费层。 - James Daniels
2
谢谢提供详细信息!真的非常感激。一旦我拿出信用卡,它就像预期的那样工作了! - Alx
3
在调用托管在另一个项目的云函数上的API时,是否也是这样?当我使用isomorphic-fetch访问https://us-central1-joanne-lee.cloudfunctions.net/getUrls/portrait时,我遇到了getaddrinfo ENOTFOUND错误。 - bob
1
当比较The Blaze Plan的价格时,您可能会看到大约10美分的一些小费用,用于数百万或数千次调用,但实际上,在使用blaze计划配额之前,您可以使用Spark计划的免费配额。https://dev59.com/E6Tja4cB1Zd3GeqPAFVF - SeanMC
显示剩余6条评论

3

在我的情况下,我不得不等待任何延迟发生并过去。现在一切都好了。


2

我遇到了因为网络不稳定而导致的问题,请更换网络连接。


1

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


4
网络连通性中的一些延迟也会导致这种情况发生。 - EngrEric
是的,我第一次遇到了这个错误。第二次在阅读了这条评论后没有做任何更改就成功了。 :) - LacOniC

1

转换到 Firebase 的 "Blaze" 计划,该计划包括之前的 Spark计划免费使用层 ,在产生任何费用之前。使用 Blaze价格计算器 查看给定使用情况的收费情况。

前5GB的出站(传出)网络流量是免费的,这与 "本地" Google Cloud Functions 会给你的 相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接