Cloud Firestore 文档添加给出错误“参数“数据”的值不是有效的 Firestore 文档。不能使用“未定义”作为 Firestore 值”

Era*_*ani 11 javascript firebase postman google-cloud-functions

我正在做一个反应项目,这是我的第一个反应项目。这段代码部署成功。但是在使用邮递员进行测试时会出现一些错误。我“发布”“createScream”函数的 URL 并发送它。然后我得到了这个错误。

对解决问题的任何帮助表示高度赞赏。我是反应世界的新手。这是我的 index.json 文件

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

admin.initializeApp();

// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//
 exports.helloWorld = functions.https.onRequest((request, response) => {
  response.send("Hello world");
 });

 exports.getScreams = functions.https.onRequest((req, res)=> {
     admin
     .firestore()
     .collection('screams')
     .get()
     .then(data=>{
         let screams =[];
         data.forEach(doc =>{
             screams.push(doc.data());
         });
         return res.json(screams);
     })
     .catch((err)=> console.error(err));
 });

 exports.createScream = functions.https.onRequest((req, res)=> {
    const newScream = {
        body:req.body.body,
        userHandle: req.body.userHandle,
        createdAt: admin.firestore.Timestamp.fromDate(new Date())
    };

    admin
    .firestore()
    .collection('screams')
    .add(newScream)
    .then((doc)=>{
        res.json({message:'document ${doc.id} created successfully'});
    })
    .catch((err)=>{
        res.status(500).json({ error:'something went wrong'});
        console.error(err);

    });
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息

Error: Value for argument "data" is not a valid Firestore document. Cannot use "undefined" as a Firestore value (found in field body).
    at Object.validateUserInput (E:\survival\TF2\functions\node_modules\@google-cloud\firestore\build\src\serializer.js: 273: 15)
    at Object.validateDocumentData (E:\survival\TF2\functions\node_modules\@google-cloud\firestore\build\src\write-batch.js: 611: 22)
    at CollectionReference.add (E:\survival\TF2\functions\node_modules\@google-cloud\firestore\build\src\reference.js: 1765: 23)
    at exports.createScream.functions.https.onRequest (E:\survival\TF2\functions\index.js: 38: 6)
    at Run (C:\Users\User\AppData\Roaming\npm\node_modules\firebase-tools\lib\emulator\functionsEmulatorRuntime.js: 608: 20)
    at C:\Users\User\AppData\Roaming\npm\node_modules\firebase-tools\lib\emulator\functionsEmulatorRuntime.js: 582: 19
    at Generator.next (<anonymous>)
    at C:\Users\User\AppData\Roaming\npm\node_modules\firebase-tools\lib\emulator\functionsEmulatorRuntime.js: 7: 71
    at new Promise (<anonymous>)
    at __awaiter (C:\Users\User\AppData\Roaming\npm\node_modules\firebase-tools\lib\emulator\functionsEmulatorRuntime.js: 3: 12)
Run Code Online (Sandbox Code Playgroud)

Dou*_*son 10

问题在于这段代码:

const newScream = {
    body:req.body.body,
    userHandle: req.body.userHandle,
    createdAt: admin.firestore.Timestamp.fromDate(new Date())
};

admin
.firestore()
.collection('screams')
.add(newScream)
Run Code Online (Sandbox Code Playgroud)

当您尝试向 Cloud Firestore 添加一个属性值为 的文档时undefined,您将收到此错误。这意味着至少三个属性之一newScream是未定义的。错误消息告诉您是哪一个:

不能使用“未定义”作为 Firestore 值(在字段正文中找到)

因此,body 属性是未定义的。您需要调试您的函数并找出req.body.body未定义的原因。也许客户端没有传递该值。

  • 这应该被标记为正确答案。就我而言,我有一个未定义的 id。我想还有一种新方法可以忽略未定义的值,因为错误消息现在显示“如果您想忽略未定义的值,请启用`ignoreUndefinedProperties`。” 但在哪里可以实现这一点呢? (2认同)

EzJ*_*zJS 5

确保在使用邮递员更改为 POST 方法时,在 url 下方的正文部分,单击原始选项,然后在最有可能显示文本的下拉列表中,将其更改为 JSON。 在此处输入图片说明