首页 > 解决方案 > 如何使用 Cloud Function 获取 Firestore 集合?

问题描述

我是后端开发的新手,正在尝试编写一个可以在 FireStore 中读取、写入和编辑数据的云函数。我为写入(添加新数据)做了云功能。但是,我无法读取工作。如果您能帮助我阅读和编辑,我将不胜感激。谢谢!

Firestore structure:

UserProfile
     |
     +--wWXaLpiOKegAMw6Jhsdf -- {"name": "Danny", "dob": "01/01/2000"}
     |
     |
     +--Ksfe7segse8tPs2pe1Qu -- {"name": "David", "dob": "11/29/1994"}
     |
     |
     +--Udfuwoi8se9g7rdw65dh -- {"name": "Sherry", "dob": "07/21/1997"}
     .
     .
     .


//index.js
const functions = require("firebase-functions");
const admin = require('firebase-admin');
admin.initializeApp();

const edit = require('./edit.js');
const read = require('./read.js');

exports.edit = functions.https.onRequest((request, response) => {
    return edit.edit(request, response);
});

exports.read = functions.https.onRequest((response) => {
     return read.read(response);
});


//read.js
const functions = require('firebase-functions');
const admin = require('firebase-admin');

exports.read = functions.https.onRequest(async (response) => {
    await admin.firestore().collection('UserProfile').get().then(snapshot => {

        snapshot.forEach(doc => {
            let arr = {
                name: doc.data().name,
                dob: doc.data().dob
            }
            response.json({result: arr });
        })
    })
})

错误:“TypeError:response.json 不是函数”

//edit.js
const functions = require('firebase-functions');
const admin = require('firebase-admin');
    
exports.edit = functions.https.onRequest(async (request, response) => {
await admin.firestore().collection('UserProfile').get().then(snapshot => {
    
    snapshot.forEach(doc => {
       if (request.body.id == doc.id) {
         doc.data().name = request.body.name,
         doc.data().dob = request.body.dob
       } 
            
       const result = {
         name = request.body.name,
         dob = request.body.dob
       }                 
       response.json({result: result});
       })
    })
 })

我还没有尝试编辑,所以可能存在读取等语法问题。我想比较文档 ID 以进行编辑。

标签: javascriptfirebasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


您需要传递和使用这两个参数,而不仅仅是response. JavaScript 有位置参数,而不是命名参数。现在,您的代码正在尝试使用 Request 对象作为 Response 对象,因为您将第一个 Request 对象命名为response.

此外,您不需要使用函数 SDK 来声明您的读取导出。只需使用正常功能。只有顶级索引导出需要使用函数SDK builder。

index.js

exports.read = functions.https.onRequest((request, response) => {
     return read.read(request, response);
});

读取.js

exports.read = async (request, response) => { ... }

推荐阅读