gpt4 book ai didi

node.js - 未处理的拒绝 (FirebaseError) : No document to update

转载 作者:行者123 更新时间:2023-12-03 12:19:38 24 4
gpt4 key购买 nike

我对编码还是很陌生,所以请耐心等待!我已经按照 youtube 类(class)构建了一个笔记应用程序并获得了一个可以使用的基础,但是我现在在删除 firebase 中的笔记时随机出现这个错误,希望有人能够发现这里正在 cooking 什么!
“未处理的拒绝(FirebaseError):没有要更新的文档:projects/speakle-dc94b/databases/(默认)/documents/notes/GdWPrQNxR3Z9TFMWmqOZ”
它像这样引用 Node 模块:
screenshot of the error in chrome
我拥有的与 firebase 交互的代码如下所示:

componentDidMount = () => {
firebase
.firestore()
.collection('notes')
.onSnapshot(serverUpdate => {
const notes = serverUpdate.docs.map(_doc => {
const data = _doc.data();
data['id'] = _doc.id;
return data;
});
console.log(notes);
this.setState({ notes: notes });
});
}

selectNote = (note, index) => this.setState({ selectedNoteIndex: index, selectedNote: note });

noteUpdate = (id, noteObj) => {
firebase
.firestore()
.collection('notes')
.doc(id)
.update({
title: noteObj.title,
body: noteObj.body,
timestamp: firebase.firestore.FieldValue.serverTimestamp()
});
}

newNote = async (title) => {
const note = {
title: title,
body: ''
};
const newFromDB = await firebase
.firestore()
.collection('notes')
.add({
title: note.title,
body: note.body,
timestamp: firebase.firestore.FieldValue.serverTimestamp()
});
const newID = newFromDB.id;
await this.setState({ notes: [...this.state.notes, note] });
const newNoteIndex = this.state.notes.indexOf(this.state.notes.filter(_note => _note.id === newID)[0]);
this.setState({ selectedNote: this.state.notes[newNoteIndex], selectedNoteIndex: newNoteIndex });
}

deleteNote = async (note) => {
const noteIndex = this.state.notes.indexOf(note);
await this.setState({ notes: this.state.notes.filter(_note => _note !== note) })
if(this.state.selectedNoteIndex === noteIndex) {
this.setState({ selectedNoteIndex: null, selectedNote: null});
} else {
this.state.notes.lenght > 1 ?
this.selectNote(this.state.notes[this.state.selectedNoteIndex - 1], this.state.selectedNoteIndex - 1) :
this.setState({ selectedNoteIndex: null, selectedNote: null });
}

firebase
.firestore()
.collection('notes')
.doc(note.id)
.delete()
.then(function() {
console.log("Document successfully deleted!");
}).catch(function(error) {
console.error("Error removing document: ", error);
});
}
}

最佳答案

我只在 Cloud Functions 中使用类似的东西,并且在编写用于执行某些操作的端点时,我遇到了下面引用的错误。
我试图读取集合中的文档,如果它存在,我正试图将新文档写入另一个集合。所以这是一种嵌套代码。
我的一段代码。

    const firstDocRef = db.collection('myFirstCollection').doc('myDocName');
const existDoc = firstDocRef.get()
.then((resDoc)=>{
if(resDoc.exists)
{
db.collection('mySecondCollection').add({
.
.
.
.
.
orderCreatedAt:Firestore.FieldValue.serverTimestamp()
})
.then((new_doc)=>{
return res.status(200);
// return 200 ok what we were trying to achieve has completed.
})
.catch(()=>{
console.log("Log, as write failed somehow");
return res.status(500);
// return a 500 internal server error occurred
});
}
else
{
console.log("My first condition wasn't met, so logged it");
return res.end();
// properly terminate the processing of request
}
});
/*.catch((err)=>{
console.log("Our first doc presence check couldn't complete and hence I arrived here, log it");
res.writeHead(500);
return res.end();
// again give back 500 to client
});*/

UnhandledPromiseRejectionWarning: ReferenceError: Firestore is not definedUnhandledPromiseRejectionWarning: Unhandled promise rejection.This error originated either by throwing inside of an async function without a catch block


现在我也是 Firebase 的新手,但我遇到了这个问题并以某种方式解决了它。
因此,如果我在 get() 中放入 catch block ,我不会收到上述错误。文档。
奇怪啊!
通过评论删除了 catch block 。得到这个错误。
现在,这是一个乱七八糟的错误,它说不存在问题,但我们是故意这样做的。
所以我开始搜索,在堆栈溢出时遇到了这个问题,发现它仍然没有答案。自己搜索并阅读了文档。
我想告诉您,这不是因为任何 Firestore 安全规则或其他任何原因。因为我在寻找答案时也遇到了一些围绕这些概念的猜测。

The common thing we all are doing here is that we are trying to achieve the ServerTimeStamp at FireStore


我想提醒您注意我在 Node 云功能代码中的导入。
const functions = require('firebase-functions');
const express = require('express');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const db = admin.firestore();
所以你看,我正在使用新的方式来获得使用 Firestore 的权限,因为我正在尝试建立一个云功能。
现在这是 Google 提供的文档引用:点击 here !
上述 API 引用提出的正确语法是
Firestore.FieldValue.serverTimestamp()
这是罪魁祸首,它没有为我提供任何时间戳,如果没有发生 catch block 未处理的 promise 错误并且在调试时没有显示错误,那么它就是行不通的。
我这样做了,解决方案部分:
即使在我的 Node 程序中进行了这些导入之后,我还是导入了这个:
const {Firestore} = require('@google-cloud/firestore');
现在我所做的只是将时间戳字段中的语句用作
Firestore.FieldValue.serverTimestamp()
就像提到的那样,甚至使用了一个 catch block ,以防在生产过程中出现任何其他问题。那就是使用 db 常量来完成所有的数据库事务,并且只用于 serverTimeStamp我必须引入新的进口。
我猜它起作用了 require('@google-cloud/firestore')导入为 {FireStore} 的语句引入了 FieldValue 事物用作引用所需的所有事物。
我希望它可以帮助任何寻找它的新人,并节省我浪费在寻找解决方案上的大量时间。
我已经通过在 firebase 模拟器上运行云功能来验证它。

关于node.js - 未处理的拒绝 (FirebaseError) : No document to update,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60075305/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com