如何解决如何使用NodeJS脚本中的firebase-tools?
我想从NodeJS脚本(而不是从Cloud Function)中删除Firestore集合及其子集合。我不能通过项目选择来解决问题。
为清楚起见,我想执行与此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");
在firebaseTools.use行上引发“ TypeError:无法在字符串'easypinger-test'上创建属性'project'”。
如果删除它,则会从delete命令中引发“ TypeError:无法读取未定义的属性'project'”。
我该怎么做?
解决方法
如果您在 firebase 函数中运行,则 firebase website 上给出的示例有效。
如果您不使用 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
});
,
documentation on deleting collections with firebase-tools提供了可使用的模板。如果要指定项目,请注意delete()
有两个参数。例如:
firebase_tools.firestore
.delete(path,{
project: YOUR-PROJECT-ID-HERE,token: functions.config().fb.token
});
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。