我有一个使用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表现得很奇怪。
答案 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-admin
(6.2.0
的先前版本,就目前而言-版本{{1 }}是最新版本)。
恐怕较新的firebase-admin版本之一在某些环境中破坏了此功能,这就是为什么这个问题不那么普遍的原因。