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/
之后它又开始工作了,一切都回到了正轨。
我有一个节点 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/
之后它又开始工作了,一切都回到了正轨。