firebase-admin - Auth error:TypeError: URL is not a constructor

firebase-admin - Auth error:TypeError: URL is not a constructor

我有一个节点 API 使用 firebase-admin 来处理 firestore 数据。几天前这还不是问题,现在开始出现了。

奇怪的是,我似乎只在我的生产服务器上得到这个,而不是在本地开发环境中(即使使用相同的数据库)。

我已经尝试重新部署、重新启动服务器、检查数据库配置和所有内容,但没有任何效果。

这是更详细的错误之一:

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似乎表现得很奇怪。

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

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

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

但是请记住,此运行时版本目前处于测试阶段,因此可能会中断。

我还注意到,通过安装以前版本的 firebase-admin(具体来说,6.2.0,就目前而言,版本 7.x.x是最新的)。

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

所以,经过将近一个星期的思考,还有其他问题和其他问题,我可以在大家的帮助下解决。

问题是 node.js 版本

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

所以我在生产环境中使用 nvm 更新了它,然后遇到了另一个与 grpc 版本相关的问题。我安装了一个较新的版本,它需要一个较旧的版本。

备注

如果您正在使用 PM2,请确保也更新它:

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

之后它又开始工作了,一切都回到了正轨。