如何修改Firebase Functions代码向Firestore写入对象数组数据
代码调整说明
原代码用GET请求的URL查询参数传值,只适合传输简单字符串,不适合传对象、对象数组这类结构化数据,要实现你的需求只需要改3处:
- 把传参方式从URL query传参改成POST请求的JSON body传参,避免参数长度限制、格式转义问题
- 增加基础的请求方法校验、参数非空校验,减少无效报错
- 把原来写入单text字段的逻辑,替换为直接写入请求体中传入的结构化数据即可
修改后的完整代码
exports.addMessage = functions.https.onRequest(async (req, res) => { // 配置跨域,前端调用需要的话保留,纯后端调用可以删掉 res.set('Access-Control-Allow-Origin', '*'); // 拦截非POST请求 if (req.method !== 'POST') { return res.status(405).json({error: '仅支持POST请求'}); } // 从请求体中获取要写入的结构化数据 const writeData = req.body.data; // 校验参数是否存在 if (!writeData) { return res.status(400).json({error: '缺少待写入的data参数'}); } // 写入Firestore,支持直接写入对象、对象数组,Firestore会自动识别字段类型 const writeResult = await admin.firestore().collection('messages').add(writeData); // 返回写入结果 res.json({result: `数据写入成功,生成文档ID:${writeResult.id}`}); });
注意:确保文件开头已经完成Firebase Admin SDK的初始化,也就是已经写过admin.initializeApp()相关逻辑,否则会报错。
调用示例
修改后不能直接在浏览器地址栏拼URL访问,需要发送POST请求并携带JSON格式的请求体,本地调试可以用curl、Postman这类工具,curl示例如下:
curl -X POST http://localhost:5001/myProj/us-central1/addMessage \ -H "Content-Type: application/json" \ -d '{ "data": { "booking_id": "0", "channels": "4", "country": "GB", "date": "2020-05-12", "currencies": "GBP", "total": "5000" } }'
如果要写入对象数组,只需要把请求体里
data的值换成数组格式即可,比如"data": [{"booking_id":"0", ...}, {"booking_id":"1", ...}],不需要额外修改代码,Firestore原生支持数组类型字段存储。
内容的提问来源于stack exchange,提问作者Sudhir
相关产品推荐
相关产品推荐

