我正在从Firebase函数对Firestore运行查询。当我从本地shell运行函数时,一切都很好。
然而,在我部署代码并调用函数之后,Firestore在生产中返回了一个空白错误{}。
Firestore权限不应该是这里的问题,因为它在本地工作。
服务帐户也不应该成为问题。
没有错误消息或调试信息。我也检查了服务器控制台上的功能日志。
firestore.collection("users").doc(uid).set(userJson, {merge:true})
.then((done) => {
console.log('Created new user');
}).catch(err => {
console.log('Error creating new user:', JSON.stringify(err));
});
包.json
"engines": { "node": "8" }
我希望部署后的行为与shell中的行为相同。如何从Firebase Functions服务器获取对Firestore工作的调用?
-
检查/functions文件夹中的package.json文件(由firebaseinit创建(。请确保您使用的是最新支持的NodeJS版本。截至2020年,应为NodeJS 10:
"engines": {"node": "10"}
-
请确保您使用的是Firebase CLI的最新版本。截至2020年,应为8.10.0
npm install -g firebase-tools
npm list -g --depth=0
npm uninstall -g firebase-tools
npm install -g firebase-tools
npm list -g --depth=0
如果不起作用,请先清理缓存npm cache clean --force
,然后重试。
- 确保传递到firestore查询的有效负载没有空键或未定义值
firestore.collection("users").doc("123").set({
id: 1234,
'': 'something', // ERROR
phone: undefined, // ERROR
email: 'user@email.com'
})
- Firestore调用是异步(它们返回Promise(。请确保在Firestore调用完成之前没有返回响应
response.send()
。正确使用async/await
或.then()
注意:您可能不需要显式配置管理员SDK服务帐户,因为默认服务帐户已经具有从云功能访问Firestore的权限。