5

What is the recommended way to share Firestore api logic (between the admin node.js and the js web) when upgrading to the web v9 modular sdk? The way I did it before was just supplying the db (and deleteField) if it was used by a serverless function.

// admin db init
import { FieldValue, getFirestore } from "firebase-admin/firestore"
const FSAdmin = createFirebaseAdminApp(options);
const db = getFirestore(FSAdmin)

That no longer seems to work as if you try to use the getFirestore(FSAdmin) with the v9 docRef doc(db, collectionName, documentID) it will give you an error:

FirebaseError: Expected first argument to collection() to be a CollectionReference, a DocumentReference or FirebaseFirestore

Frank van Puffelen
  • 565,676
  • 79
  • 828
  • 807
Philip Aarseth
  • 301
  • 4
  • 16

1 Answers1

0

It seems like the function getFirestore(FSAdmin) and getFirestore(FSAdmin) does not get what it expects. As I can't see your complete configuration and debug information, it's a bit difficult to tell the full context of the error. As it is stated in the Firebase docs firebase docs, make sure to call initializeApp(firebaseConfig); including the proper configuration before you use Firestore in your app. Also check that you have the latest version of all your Firebase packages installed. I also know that Firebase has recently got quite some library changes, as Firebase also strives to minify itself.

Note that there are two packages:

const { initializeApp } = require('firebase-admin/app');

and

import { initializeApp } from 'firebase/app';

In addition, I could not find createFirebaseAdminApp() and getFirestore() in the current function list of the Firebase docs, so I think they changed the signature completely.

Firebase/JS all signatures.

I hope I could help you at least a bit.

Blackey
  • 1
  • 1
  • The `getFirestore(FSAdmin)` works fine by itself, the problem here is that the admin sdk still uses the old namespace `(db.collection("collID").doc("docID")` format instead of the newer modular format (`doc(db, "collID", "docID"`). createFirebaseAdminApp is just a function I made that initialises or returns firebase admin. – Philip Aarseth May 10 '22 at 13:18
  • It seems like the Firebase documentation could be a lot more extensive and maybe even provide some examples of usage. Probably you won't be the last person with such questions. – Blackey May 10 '22 at 13:33