【问题标题】:How do I write to Firestore using Angular 5?如何使用 Angular 5 写入 Firestore?
【发布时间】:2018-10-25 21:45:12
【问题描述】:

我已使用本教程 https://angularfirebase.com/lessons/angular-stripe-payments-part-2-firebase-cloud-functions-backend/ 将我的 Stripe 结帐连接到 Firebase 实时数据库

成功了。但是,我需要使用 Firestore 进行结帐流程,因为我们已将数据库迁移到那里。不幸的是,它不起作用!该功能有效,但数据仍保存在实时数据库中,而不是 Firestore。这是我的代码:

const functions = require('firebase-functions');
const admin = require('firebase-admin')

admin.initializeApp(functions.config().firebase);

const firebaseConfig = JSON.parse(process.env.FIREBASE_CONFIG);

const db = admin.firestore(); // Firebase
const stripe = require('stripe')(functions.config().stripe.testkey) // Stripe

exports.stripeCharge = functions.firestore
                                .document('/payments/{userId}') 
                                .onWrite(event => {

    const payment = event.data.val();
    const userId = event.params.userId;
    const paymentId = event.params.paymentId;

    // checks if payment exists or if it has already been charged
    if (!payment || payment.charge) return;

    return admin.firestore()
          .collection('payments')
          .doc('{userId}')
          .once('value')
          .then(snapshot => {
              return snapshot.val();
           })
           .then(customer => {

             const amount = payment.amount;
             const idempotency_key = paymentId;  // prevent duplicate charges
             const source = payment.testkey.id;
             const currency = 'php';
             const charge = {amount, currency, source};


             return stripe.charges.create(charge, { idempotency_key });

           })

           .then(charge => {
               db
               .collection('payments')
               .doc('{userId}')
               .collection('{paymentId}')
               .field('charge')
               .set(charge)
              })

 });

从教程的第 1 部分开始,数据库结构是这样的:

payments
    $userId
        $paymentId
             amount: number
             token: object
             charge: object

【问题讨论】:

    标签: firebase firebase-realtime-database stripe-payments google-cloud-firestore


    【解决方案1】:

    我认为您正在使用 firebase-functions >1.0.0

    admin.initializeApp();
    

    查看完整的迁移指南here

    【讨论】:

    • 嗨!谢谢你的帮助!我已经尝试了这些更改:// admin.initializeApp(functions.config().firebase);admin.initializeApp(); .onWrite(event => {.onWrite((change, context) => { 我已经添加了这个:let firebaseConfig = JSON.parse(process.env.FIREBASE_CONFIG); 它仍然保存在实时数据库中。我还能错过什么?我这样做时没有错误firebase deploy --only functions
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多