【发布时间】:2025-11-29 00:00:02
【问题描述】:
当我尝试使用邮递员将数据发布到 firebase 时,我收到此错误: 错误:参数“data”的值不是有效的 Firestore 文档。不能将“未定义”用作 Firestore 值(在字段正文中找到)。
我检查了 body 和 userHandle 以未定义的形式返回,但我不知道为什么。使用邮递员,我使用 POST 并在正文中发送这样的 json:
{
"body": "scream 2",
"userHandle": "user2"
}
作为原始 JSON(应用程序/json)
const functions = require('firebase-functions');
const admin = require('firebase-admin');
let firebaseConfig = {
apiKey: '*******',
authDomain: '******',
databaseURL: '*****',
projectId: '*****',
storageBucket: '****',
messagingSenderId: '*****',
appId: '*******'
};
admin.initializeApp(firebaseConfig);
exports.createScream = functions.https.onRequest((req, res) => {
if (req.method !== 'POST') {
return res.status(400).json({ error: 'Method not allowed' });
}
const newScream = {
body: req.body.body,
userHandle: req.body.userHandle,
createdAt: admin.firestore.Timestamp.fromDate(new Date())
};
admin
.firestore()
.collection('screams')
.add(newScream)
.then(doc => {
res.json({ message: `document ${doc.id} created successfully` });
})
.catch(err => {
res.status(500).json({ error: 'something went wrong' });
console.error(err);
});
});
【问题讨论】:
-
您好 Vilmos,欢迎来到 *!我没有发现您明显做错的任何事情...您可以将
console.log(req.body)作为您的函数的第一行,然后将check your function logs 包含在整个身体中吗? -
{ "body":"scream", "userHandle":"user2" } 我尝试使用 express + body-parser 但我得到了同样的错误。
-
理想时间...虽然我怀疑这会解决它 - 但我建议您通过返回您的承诺来遵循best practices to ensure your cloud function has enough time to run...意思是
return admin.firestore().colle....etc...永远不知道,也许云功能之前终止它完成了“添加”新条目......所以当它确实最终“添加”新条目时,请求/响应周期已经结束......并且 req.body 现在是空的。
标签: node.js firebase google-cloud-firestore google-cloud-functions