firebase-admin-身份验证错误:TypeError:URL不是构造函数

时间:2019-04-16 14:09:37

标签: api google-cloud-firestore firebase-admin

我有一个使用firebase-admin处理firestore数据的节点API。直到几天前这才成为问题,现在它开始发生。

奇怪的是,我似乎只在生产服务器上而不是在本地开发环境(即使使用同一数据库)上也可以。

我尝试过重新部署,重新启动服务器,检查数据库配置以及所有内容,但没有任何实际效果。

这是更详细的错误之一:

Error: 14 UNAVAILABLE: Getting metadata from plugin failed with error: URL is not a constructor
    at Object.exports.createStatusError (/root/apps/api/src/node_modules/grpc/src/common.js:91:15)
    at Object.onReceiveStatus (/root/apps/api/src/node_modules/grpc/src/client_interceptors.js:1204:28)
    at InterceptingListener._callNext (/root/apps/api/src/node_modules/grpc/src/client_interceptors.js:568:42)
    at InterceptingListener.onReceiveStatus (/root/apps/api/src/node_modules/grpc/src/client_interceptors.js:618:8)
    at callback (/root/apps/api/src/node_modules/grpc/src/client_interceptors.js:845:24)

这是我的连接文件:

import * as admin from 'firebase-admin'
import serviceAccount from './fbAdminKey'

admin.initializeApp({
    projectId: '<myProjectId>',
    credential: admin.credential.cert(serviceAccount),
    databaseURL: '<myDbURL>'
})

const db = admin.firestore()
const messaging = admin.messaging()
const auth = admin.auth()

export default { db, messaging, auth }

它应该能够仅连接到数据库并执行操作,我有一个应用程序,一个Web应用程序,并且它们都可以正常工作,只是节点API表现得很奇怪。

2 个答案:

答案 0 :(得分:1)

因此,在我的头撞了近一个星期之后,遇到了其他问题和问题,我可以在这里所有人的帮助下弄清楚。

问题是node.js版本

我正在生产上运行节点8.4.0 本地和节点6.x.x(firebase-admin 7.0.0)

因此,我使用nvm更新了生产环境,然后又遇到了与grpc版本有关的另一个问题。我安装了较新的版本,并且需要较旧的版本。

注意

如果您使用的是PM2,请确保也进行更新:

http://pm2.keymetrics.io/docs/usage/update-pm2/

此后,它又开始工作了,一切又回到了正常状态。

答案 1 :(得分:0)

不是确切的解决方案,因为它不能解决Node 6.11.5的问题。

生产服务器默认在Node 6.11.5上运行,如果要将运行时版本更改为8,请参阅本文。

https://firebase.google.com/docs/functions/manage-functions#set_runtime_options

但是,请记住,此运行时版本当前处于beta版,因此可能会中断。

我还注意到,通过安装firebase-admin6.2.0的先前版本,就目前而言-版本{{1 }}是最新版本)。

恐怕较新的firebase-admin版本之一在某些环境中破坏了此功能,这就是为什么这个问题不那么普遍的原因。