与Firebase一样多产,令我感到惊讶的是,我似乎找不到太多有关如何查询集合中一组文档(其ID未知)的文档,并且然后根据每个文档的属性执行一些逻辑。
在我的特定示例中,我要做的就是根据收费日期是否过去来查询待付款项集合,然后使用Stripe处理收费。到目前为止,我在运行该函数时没有任何运气,但出现了此错误:
TypeError: functions.firestore.collection is not a function
at exports.chargePendingStripeAccounts.functions.pubsub.schedule.onRun (/srv/lib/index.js:78:32)
at cloudFunction (/srv/node_modules/firebase-functions/lib/cloud-functions.js:127:23)
at /worker/worker.js:825:24
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7)
这是该函数的代码
exports.chargePendingStripeAccounts = functions.pubsub.schedule('every 2 minutes').onRun((context) => {
return functions.firestore.collection('payments', (ref) => ref.where('charge_date', '>=', new Date())).get()
.then(payments => {
payments.forEach(doc => {
const data = doc.val();
const amount = data.price * 100;
const idempotency_key = data.creator_id; // prevent duplicate charges
const source = data.token.id;
const currency = 'USD';
const charge = {amount, currency, source};
return stripe.charges.create(charge, { idempotency_key });
})
});
});
在Cloud Functions中肯定有一种方法,对吧?
答案 0 :(得分:0)
您似乎正在尝试使用Cloud Functions for Firebase SDK来查询Cloud Firestore。那是行不通的。 Functions SDK(在您的代码中,由functions
标识)仅使您可以声明为响应项目中的更改而运行的触发器。如果要查询Cloud Firestore,则必须使用可用于nodejs的服务器SDK之一。您可以使用SDK provided by Google Cloud,也可以使用Firebase Admin SDK(仅包装Cloud SDK)。
Firebase团队提供的official samples几乎都在适当的地方使用Admin SDK,因此您可以将其用作示例。