Firebase Cloud Functions bitly 示例抛出错误

Posted

技术标签:

【中文标题】Firebase Cloud Functions bitly 示例抛出错误【英文标题】:Firebase Cloud Functions bitly example throwing error 【发布时间】:2019-02-28 14:48:00 【问题描述】:

我正在按照 github 存储库中的示例来缩短链接 url

https://github.com/firebase/functions-samples/tree/Node-8/url-shortener

给出的错误如下

12:49:56.472米。 shortUrl 函数执行耗时 509 毫秒,完成 状态:'错误'12:49:56.464 a。米。缩短网址请求错误: 错误:getaddrinfo EAI_AGAIN api-ssl.bitly.com:443 在新的 RequestError (/srv/node_modules/request-promise-core/lib/errors.js:14:15) 在 Request.plumbing.callback (/srv/node_modules/request-promise-core/lib/plumbing.js:87:29) 在 Request.RP$callback [as _callback] (/srv/node_modules/request-promise-core/lib/plumbing.js:46:31) 在 self.callback (/srv/node_modules/request/request.js:185:22) 在 emitOne (events.js:116:13) 在 Request.emit (events.js:211:7) 在 Request.onRequestError (/srv/node_modules/request/request.js:881:8) 在 emitOne (events.js:116:13) 在 ClientRequest.emit (events.js:211:7) 在 TLSSocket.socketErrorListener (_http_client.js:387:9) 在 emitOne (events.js:116:13) 在 TLSSocket.emit (events.js:211:7) 在 emitErrorNT (internal/streams/destroy.js:64:8) 在 _combinedTickCallback (内部/进程/next_tick.js:138:11) 在 process._tickDomainCallback (internal/process/next_tick.js:218:9)

我确实是函数新手,但我确实按照那里的文档中的所有步骤进行操作。

这是我的函数文件夹中的 index.js

const functions = require('firebase-functions');
const BitlyClient = require('bitly');
// TODO: Make sure to set the bitly.access_token cloud functions config using the CLI.
const bitly = BitlyClient(functions.config().bitly.access_token);

// Shorten URL written to /links/linkID.
exports.shortenUrl = functions.database.ref('/links/linkID').onCreate(async (snap) => 
  const originalUrl = snap.val();
  const response = await bitly.shorten(originalUrl);
  return snap.ref.set(
    original: originalUrl,
    short: response.data.url,
  )
);

还有我的 package.json 以便为 bitly 编译必要的


  "name": "url-shortener-functions",
  "description": "URL Shortener Firebase Functions sample",
  "dependencies": 
    "bitly": "^5.1.7",
    "firebase-admin": "~6.0.0",
    "firebase-functions": "^2.0.5"
  ,
  "devDependencies": 
    "eslint": "^4.13.1",
    "eslint-plugin-promise": "^3.6.0"
  ,
  "scripts": 
    "lint": "./node_modules/.bin/eslint --max-warnings=0 .",
    "serve": "firebase serve --only functions",
    "shell": "firebase experimental:functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  ,
  "engines": 
    "node": "8"
  ,
  "private": true

我也在我的函数文件夹中做了npm -install bitly,但仍然抛出该错误

我还按照文档说明在我的数据库中添加了链接

/functions-project-12345
    /links
        link-123456: "https://my.super.long-link.com/api/user/profile/-jEHitne10395-k3593085"

有什么线索吗?谢谢

【问题讨论】:

【参考方案1】:

它抱怨说它无法为远程主机解析:

RequestError: Error: getaddrinfo EAI_AGAIN api-ssl.bitly.com:443

因此,我假设需要 paid plan 才能执行此外部 API 调用。

【讨论】:

嗯,很奇怪,因为我生成了访问令牌,就像它从该文档中所说的那样 也是我制作的第一个函数 @Todd 以及您对 Firebase 的计划;启用结算功能了吗? @Todd 你不能进行这个调用,因为它是一个外部 API 调用。见上面的链接。它读取Outbound networking: Google services only(不包括bitly.com)。

以上是关于Firebase Cloud Functions bitly 示例抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中为 Firebase 使用 Cloud Functions

Cloud Functions for Firebase 超时

Firebase Cloud Functions https.onCall 完成状态码:204

Cloud Functions for Firebase onWrite 超时

Easy Firebase Cloud Functions 组织

在 Firebase Cloud Functions 中创建 PDF