firebase - 在将其放入 Firestore 之前,使用函数对 HTTP 请求中的 JSON 数据进行排序
问题描述
我需要一个函数来接收来自 HTTPS 请求的信息,然后根据数据的内容将数据放入特定的集合/文档中。
为简化起见,如果我收到带有数据“颜色:蓝色”的 JSON,我想将其放入文档 1。但如果我收到“颜色:绿色”,我想将其放入文档 2。
[编辑] 假设我在该集合中有集合用户和 2 个文档,DOC1 和 DOC2。我是否在某处放置了 switch 语句,或者如何对数据进行排序,以便函数知道将其放置在哪里。
这不完全是我想要做的,但它是相同的概念。我需要根据收到的 JSON 文件将数据放入特定的文档中。
非常感谢任何和所有帮助。我已经坚持了几天了。
我看过视频并查看了谷歌的文档,但我对功能很陌生,不太了解。我现在使用的功能只是接受数据并将其放在特定位置。我也得到了帮助,所以我什至也不真正理解它。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const _ = require('lodash');
admin.initializeApp();
const db = admin.firestore();
const express = require('express');
const cors = require('cors');
const app = express();
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.get('/', async (req, res) => {
let data = req.query.data;
try {
await db.collection('users').doc().set({ userId: data });
} catch(err) { res.send(JSON.stringify(err)) }
res.send('Success');
})
app.post('/', async (req, res) => {
let payload = req.body;
let keys = Object.keys(payload);
let obj = {};
let i = 0;
try {
_.forEach(payload, async data => {
obj[keys[i]] = data;
i++;
})
//
await db.collection('users').doc().set(obj);
} catch(err) { res.send(JSON.stringify(err))}
res.send('Success');
})
exports.writeToFirestore = functions.https.onRequest(app);
这是我当前的函数,它只接受 JSON 数据并将它们全部放在同一个位置。
解决方案
让我们用一个简单的 HTTPS Cloud Function 来回答,如文档所示。
假设您将颜色作为 URL QueryString 参数传递(请参阅http://expressjs.com/en/4x/api.html#req。
exports.switchWrite = functions.https.onRequest((req, res) => {
const color = req.params.color;
let firestoreDocumentId;
if (color === 'blue') {
firestoreDocumentId = 'DOC1'
} else {
//Then color is green!! Up to you to make a more complex "switch"
firestoreDocumentId = 'DOC2'
}
const db = admin.firestore();
db.collection('collectionId').doc(firestoreDocumentId)
.set({
foo: bar
})
.then(() => {
res.status(200).send({status: 'saved', color: color}); //For example
})
.catch(error => {
console.log(error);
res.status(500).send(error);
})
});
推荐阅读
- typo3 - 将在线视频添加到“textmedia”元素
- c# - 在 tcp 流关闭之前,TcpClient 不会向 Logstash 发送数据
- sql - 没有第一个表ID的表连接?
- java - 确保将实体添加到休眠搜索索引
- c# - MSI 安装程序(Visual Studio 安装程序项目)未更新使用中的文件
- octobercms - 为使用 relationExtendManageWidget() 添加的字段定义默认值
- javascript - JEE Servlet / JS:document.cookie 在 Chrome 和 IE 之间没有返回相同的东西
- javascript - Chrome 扩展在两个选项卡上工作
- react-admin - 我的所有路由都在资源之前的主机之后包含一个标签,host.com/#/resource,知道我可能做了什么导致这种情况吗?
- appcode - AppCode 自动完成未显示正确结果