如何正确查询云功能的实时数据库



更新

我正试图根据保存的用户查询我的定价数据,并将其发送回我的条纹结账云功能中。它不断给我一个错误,说明当我有变量时,没有给变量赋值。我读了关于如何做到这一点的文档,但最后我有点困惑。然后我在其他几个地方看到了类似的东西,但后来我把代码搞混了。如何从另一个函数调用变量名以将其放入定价信息中?

我使用的来源:

  • 如何使用云功能从Firebase查询特定数据
  • 如何从Cloud函数内部运行查询
  • https://firebase.google.com/docs/database/extend-with-functions
  • https://firebase.google.com/docs/functions/database-events

这就是我的数据在实时数据库中的设置方式:

studiopick
studio
users
Gcsh31DCGAS2u2XXLuh8AbwBeap1
email : "Test@gmail.com"
firstName : "Test"
lastName : "one"
phoneNumber : "2223334567"
prices
|   roomA
|     serviceOne
|       numberInput : "300"
|       serviceType : "mix n master"
studioName : "Studio One"
uid : "Gcsh31DCGAS2u2XXLuh8AbwBeap1"

我的云功能就是这样设置的:

const functions = require("firebase-functions");
const admin = require("firebase-admin");
let price;
let info;
admin.initializeApp(functions.config().firebase);
exports.createStripeCheckout = functions.https.onCall(async (data, context) => {
const querySnapshot = await ref
.orderByChild("numberInput, serviceInput")
.equalTo(price, info)
.once("value");
// Stripe init
const stripe = require("stripe")(functions.config().stripe.secret_key);
const session = await stripe.checkout.sessions.create({
payment_method_types: ["card"],
mode: "payment",
success_url: "http://localhost:5500/success",
cancel_url: "http://localhost:5500/cancel",
shipping_address_collection: {
allowed_countries: ["US"],
},
line_items: [
{
quantity: 1,
price_data: {
currency: "usd",
unit_amount: price * 100, // 10000 = 100 USD
product_data: {
name: info,
},
},
},
],
});
return {
id: session.id,
};
});
exports.stripeWebhook = functions.https.onRequest(async (req, res) => {
const stripe = require("stripe")(functions.config().stripe.token);
let event;
try {
const whSec = functions.config().stripe.payments_webhook_secret;
event = stripe.webhooks.constructEvent(
req.rawBody,
req.headers["stripe-signature"],
whSec
);
} catch (err) {
console.error("⚠️ Webhook signature verification failed.");
return res.sendStatus(400);
}
const dataObject = event.data.object;
await admin.firestore().collection("orders").doc().set({
checkoutSessionId: dataObject.id,
paymentStatus: dataObject.payment_status,
shippingInfo: dataObject.shipping,
amountTotal: dataObject.amount_total,
});
return res.sendStatus(200);
});

部署时,云函数在它们自己的隔离容器中运行。

当您调用retreivefromdatabase函数时,Cloud Functions代码的一个实例会被启动,然后处理请求,并且该实例在完成时休眠(如果以后不再调用,它将被关闭(。当您调用createStripeCheckout函数时,Cloud Functions代码的一个新实例会被启动,然后处理请求,实例会休眠(稍后关闭(。

因为这些函数由单独的实例承载和处理,所以不能使用全局状态在函数之间传递信息。

不幸的是,本地测试模拟器并没有以同样的方式完全隔离函数(也没有模拟节流(,这让你误以为它在生产中应该运行良好。

相关内容

  • 没有找到相关文章

最新更新