Мне нужна функция, которая принимает информацию из запроса HTTPS, а затем помещает данные в определенные коллекции / документы, основанные на том, что данные.

Чтобы упростить, если я получу JSON с данными «Цвет: синий», я хочу поставить его в документ 1. Но если я получаю «Цвет: зеленый», я хочу поставить его в документ 2.

[Править] Так сказать, у меня есть коллекции пользователей и 2 документа в этой коллекции, DOC1 и DOC2. Я имею вставку выключателя выключателя где-нибудь или как я могу сортировать данные, чтобы функция знала, где его разместить.

Это не совсем то, что я хочу сделать, но это та же концепция. Мне нужно поставить данные в конкретные документы на основе файла JSON, которые я получу.

Любая и вся помощь значительно ценится. Я застрял на этом несколько дней сейчас.

Я смотрел видео и посмотрел на документацию Googles, но я очень новичок в функциях и не совсем понимаю. Функция, которую я использую сейчас, просто принимает данные и ставит его в определенное место. Я также помог сделать это, поэтому я даже не понимаю это тоже.

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 и ставит все это в том же месте.

0
Yewla 23 Сен 2019 в 18:40

1 ответ

Лучший ответ

Давайте дадим ответ с простой функцией облачного HTTPS, как показано в Документация .

Давайте представим, что вы проходите цвет как на параметр запрос URL-адреса (см. 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);
    })

});
2
Renaud Tarnec 23 Сен 2019 в 19:09