使用本地运行的Firebase Function Emulator访问Cload Firestore数据库

时间:2019-07-03 14:43:20

标签: google-cloud-firestore google-cloud-functions emulation

我使用Firebase Emulator Suite在本地运行和调试Cload函数,如本指南所述:https://firebase.google.com/docs/functions/local-emulator

我已经准备好使用其中的一些数据的Cload Firestore数据库。

我尝试通过本地模拟的cload函数从Cload Firestore获取数据。

到目前为止,我的方法是遵循https://cloud.google.com/community/tutorials/cloud-functions-firestore中的“编写云功能代码”部分

我的functions / src / index.ts文件如下:

import * as functions from 'firebase-functions';

const Firestore = require('@google-cloud/firestore');
const cors = require('cors')({origin: true});
const admin = require('firebase-admin');

admin.initializeApp();

const PROJECTID = 'XYZ';
const firestore = new Firestore({
  projectId: PROJECTID
});

const logger = function(object: any){
    console.log(JSON.stringify(object));
} 

export const create_order = functions.https.onRequest((request, response) => {
    cors(request, response, () => {
        // var test_doc_id = "82GKB2P6xee9lftOidDj";
        const trucks = firestore.collection("trucks").get();
        logger(trucks);
        response.send(JSON.stringify(firestore));
    });
});

我希望“卡车”的价值包含来自消防站的所有卡车的排列,但不会返回“ {}”的结果。

有人可以给我一些提示,指南和建议,如何以正确的方式做到这一点吗?

最诚挚的问候,谢谢您的帮助

2 个答案:

答案 0 :(得分:1)

firestore.collection("trucks").get() returns a Promise

如果要注销数据,可以编写一个异步方法:

cors(request, response, async () => {
  const trucks = await firestore.collection('trucks').get();
  logger(trucks);
  // ...
});

答案 1 :(得分:0)

我认为您可以使用GOOGLE_APPLICATION_CREDENTIALS环境变量来控制正在监听的DB函数。不运行将监听本地,而运行生产firebaseAdminSdkServiceAccount.json则将监听生产数据库中的更改。

在Windows上,您可以像这样从终端启动它:

SET GOOGLE_APPLICATION_CREDENTIALS=/config/firebaseAdminSdkServiceAccount.json
firebase emulators:start

然后侦听您参考的Firestore文档更改:

const functions = require('firebase-functions');
functions.firestore.document('/mydoc/{mydocId}').onWrite(...)

编辑:为确保我是对的,我做了一些谷歌搜索,并提出了以下解释:

使用仿真器:开始时,我们希望将人员保留在本地 仿真环境,除非他们明确要求被打破。 现在,您可以要求通过手动恢复 在模拟器中运行时,GOOGLE_APPLICATION_CREDENTIAL文件。

https://github.com/firebase/firebase-tools/issues/1412#issuecomment-504561828