首页 > 解决方案 > 无法在 Cloud Functions 的 HTTP 触发器中访问 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
}

标签: node.jsfirebasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


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

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


推荐阅读