错误:没有要更新的实体:app-Firestore云函数



这是我非常基本的云功能:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const db = admin.firestore()
exports.createdNewAccount = functions.auth.user().onCreate(event => {
return db.collection('users').doc(event.data.uid).update({
"creationDate" : Date.now()
})
})

我得到错误

错误:没有要更新的实体:应用

我的代码出了什么问题?

很可能event.data.uid的文档不存在。update()的文档说明:

如果应用于不存在的文档,更新将失败。

请改用set()。

在使用Firebase模拟器本地测试应用程序时,我遇到了类似的错误。我的firebase配置文件看起来像:

import firebase from "firebase";
import "firebase/firestore";
const firebaseConfig = {
apiKey: <FIREBASE_API_KEY>,
authDomain: <FIREBASE_AUTH_DOMAIN>,
databaseURL: <FIREBASE_DB_URL>,
projectId: <FIREBASE_PROJECT_ID>,
storageBucket: <FIREBASE_STORAGE_BUCKET>,
messagingSenderId: <FIREBASE_MSG_SENDER_ID>,
appId: <FIREBASE_APP_ID>,
measurementId: <FIREBASE_MEASUREMENT_ID>,
};
// Initialize Firebase
const firebaseApp = firebase.initializeApp(firebaseConfig);
// for local instances, use the emulator to connect the frontend to firestore & functions
if (location.hostname === "localhost") {
firebase.firestore().settings({
host: "localhost:8080",
ssl: false,
});
firebase.functions().useFunctionsEmulator("http://localhost:5001");
}

原来我的本地Firestore数据库(预计在localhost:8080上运行)没有被击中。所以我的云函数试图写入一个不存在的数据库。根本的问题是,我的后端也初始化到了另一个数据库:

// functions/index.js
const admin = require("firebase-admin");
var serviceAccount = require("./serviceAccount.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: "https://other-firebase-project-id.firebaseio.com",
});

解决方案(最初改编自Fireship教程)是完全删除数据库的[不正确]重新初始化:

// functions/index.js
... 
admin.initializeApp();
... 

毕竟,根据文档,我们可以在没有参数的情况下初始化Firebase Admin SDK,因为Firebase_CONFIG环境变量自动包含在通过Firebase CLI部署的Firebase函数的云函数中。

FWIW,还要确保在CLI上设置正确的Firebase项目。这样做可以使Firebase CLI将Functions/Firestore挂接到正确的项目:

firebase use <desired-firebase-project-id>

如果你有多个Firebase项目,你可以用firebase projects:list列出它们

相关内容

  • 没有找到相关文章

最新更新