错误:没有要更新的实体:app - Firestore云功能

时间:2017-10-10 21:33:37

标签: firebase google-cloud-functions google-cloud-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()
    })
})

我收到错误

  

错误:没有要更新的实体:app

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:10)

最有可能的是,event.data.uid的文档不存在。 update()州的文档:

  

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

改为使用set()

答案 1 :(得分:0)

使用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",
});

解决方案(最初为adapted from a Fireship tutorial)是完全删除此[错误]重新初始化数据库:

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

毕竟,according to the docs我们可以在不带参数的情况下初始化Firebase Admin SDK,因为 FIREBASE_CONFIG环境变量自动包含在通过Firebase CLI部署的Firebase功能的Cloud Functions中。

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

firebase use <desired-firebase-project-id>

如果您有多个Firebase项目,则可以使用firebase projects:list

列出它们。