首页 > 解决方案 > 在将其放入 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 数据并将它们全部放在同一个位置。

标签: firebasesortingvue.jsgoogle-cloud-firestoregoogle-cloud-functions

解决方案


让我们用一个简单的 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);
    })

});

推荐阅读