#javascript #node.js #firebase #google-cloud-firestore #firebase-tools
#javascript #node.js #firebase #google-облако-firestore #firebase-tools
Вопрос:
Я хочу удалить коллекцию Firestore и ее вложенные коллекции из скрипта NodeJS (не из облачной функции). Я не могу правильно выбрать проект.
Чтобы было ясно, я хочу выполнить то же, что и эта команда CLI, но из скрипта:
firebase -P my-project firestore:delete fruits --recursive
Вот моя попытка:
const admin = require("firebase-admin");
const serviceAccount = require("path_to_my_service_account_key.json");
admin.initializeApp({
credential: admin.credential.cert(serviceAccount),
databaseURL: `https://my-project.firebaseio.com`,
});
const firebaseTools = require("firebase-tools");
firebaseTools.use("my-project");
async function deleteCollection(collectionName) {
const ref = admin.firestore().collection(collectionName);
const res = await firebaseTools.firestore.delete(ref);
console.log("delete success:", res);
}
deleteCollection("fruits");
Он выдает «TypeError: не удается создать свойство ‘project’ в строке ‘easypinger-test'» в firebaseTools.используйте строку.
Если я удалю его, он выдает «TypeError: не удается прочитать свойство ‘project’ неопределенного» из команды удаления.
Как я могу сделать это правильно?
Комментарии:
1. Я не уверен, откуда у вас возникла идея позвонить
firebaseTools.use()
. Возможно, вы хотите начать с кода в документации. Обратите внимание, чтоdelete()
принимает два аргумента. firebase.google.com/docs/firestore/solutions/delete-collections2. Спасибо! Это работает при передаче информации о проекте в качестве параметра
delete
. Я искал способ указать проект, к которому будут применяться мои команды, у меня возникла неправильная идея вызоваuse
, прочитав команды здесь: firebase.google.com/docs/cli#admin-commands3. Если вы разместите свою ссылку в качестве ответа, я могу ее принять.
4. Если вы хотите удалить всю базу данных при эмуляции, полезно знать, что для этого есть специальный API-интерфейс эмулятора. github.com/firebase/firebase-js-sdk/blob/master/packages /…
Ответ №1:
Пример, приведенный на веб-сайте firebase, работает, если вы работаете в функции firebase.
Если вы не используете функции firebase, вам не нужно полагаться на firebase-functions
пакет, чтобы получить действительный токен functions.config().fb.token
.
Например, вместо этого вы могли бы использовать firebase-admin
пакет.
const admin = require("firebase-admin");
admin.initializeApp({
// APP OPTIONS
});
const cred = admin.app().options.credential;
if (!cred) {
throw new Error('Admin credential was undefined');
}
const access_token = (await cred.getAccessToken()).access_token;
await firebase_tools.firestore
.delete(path, {
project: process.env.GCLOUD_PROJECT,
recursive: true,
yes: true,
token: access_token
});
Ответ №2:
Документация по удалению коллекций с помощью firebase-tools предоставляет шаблон для работы. Если вы хотите указать проект, обратите внимание, что delete()
он принимает два параметра. Например:
firebase_tools.firestore
.delete(path, {
project: YOUR-PROJECT-ID-HERE,
recursive: true,
yes: true,
token: functions.config().fb.token
});