无法在Cloud Functions的HTTP触发器内访问Firestore

时间:2019-07-17 11:21:21

标签: node.js firebase google-cloud-firestore google-cloud-functions

我需要将我的值从请求正文存储到Cloud Firestore中,并在响应中发送回foruminsertdata.Name。但是我无法做到这一点。

const functions = require('firebase-functions');

const admin =require("firebase-admin");
admin.initializeApp(functions.config().firebase);
const db = admin.firestore();

exports.helloWorld = functions.https.onRequest((req, res) => { 
if(req.method === 'POST'){
foruminsertdata = req.body;
db.collection('forum').add({
     Name: foruminsertdata.Name,
     Description: foruminsertdata.Description,
     Heading: foruminsertdata.Heading,
     PostedOn: foruminsertdata.PostedOn,
     Status: foruminsertdata.Status,

 })
 .then(ref => {
     console.log('Added document with ID: ', ref.id);
     return res.status(200).json(
         {
         message: foruminsertdata.Name
     });
 })
 .catch(err => {
     console.log('Error getting documents', err);
   });

 res.json({
     message: foruminsertdata.Status,

 });
 }

})

我不知道发生了什么...无论如何我总是得到输出

{
message: foruminsertdata.Status,
}

其中“ foruminsertdata.Status”具有我提供的某些值 但我希望输出为

{
    message: foruminsertdata.Name
}

1 个答案:

答案 0 :(得分:0)

您的函数将立即向客户端返回foruminsertdata.Status,而无需等待数据库操作的承诺解决。任何返回promise的函数都是异步的,并且会立即返回。执行将继续在您附加到它的回调中。

我不确定为什么在代码中有两次调用res.json()的问题,但是如果您只想在查询完成后发送响应,则将第二个删除,然后在查询完成。您可能还希望在catch回调中发送响应以指示错误。