很抱歉,如果这似乎是一个非常基本的问题,那么云功能的概念对我来说是一个新事物,我在学习过程中仍然处于高度地位。
但是,在尝试执行此云功能时,出现以下错误
TypeError: Cannot read property 'data' of undefined
完整日志可见here
我也没有提供此功能,只是为了使其正常工作,我使用了this视频。
实际的云功能:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const firestore = admin.firestore();
const settings = { timestampInSnapshots: true };
firestore.settings(settings);
const stripe = require('stripe')(functions.config().stripe.token);
exports.addStripeSource =
functions.firestore.document('cards/{userid}/tokens/{tokenid}')
.onCreate(async (tokenSnap, context) => {
var customer;
const data = tokenSnap.after.data();
if (data === null) {
return null
}
const token = data.tokenId;
const snapchat = await
firestore.collection('cards').doc(context.params.userId).get();
const customerId = snapshot.data().custId;
const customerEmail = snpashot.data().email;
if (customerId === 'new') {
customer = await stripe.customers.create({
email: customerEmail,
source: token
});
firestore.collection('cards').doc(context.params.userId).update({
custId: customer.id
});
}
else {
customer = await stripe.customers.retrieve(customerId)
}
const customerSource = customer.sources.data[0];
return firestore.collection('cards').doc(context.params.userId).collection('sources').doc(customerSource.card.fingerprint).set(customersource, { merge: true });})
用于编写付款服务的dart代码:
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
class PaymentService {
addCard(token) {
FirebaseAuth.instance.currentUser().then((user) {
print("Found User");
Firestore.instance
.collection('cards')
.document(user.uid)
.collection('tokens')
.add({'tokenId': token}).then((val) {
print('saved');
});
});
}
}
最后,当我按下按钮时执行什么操作
StripeSource.addSource().then((String token) {
print("Stripe!");
PaymentService().addCard(token);
});
如您所见,代码显然已被触发,但是我想数据变量存在某种错误,JavaScript对我来说是全新的,因此请确保它存在某种非常愚蠢的语法问题。
答案 0 :(得分:0)
如您提供的日志输出所说明:您需要为firestore.document函数定义一个引用:
functions.firestore.document('cards/{userid}/tokens/{tokenid}')
修改为:
functions.firestore.documentReference(){
}
答案 1 :(得分:0)
从所附的日志图片中,错误为context is not defined
functions.firestore.document('cards/{userid}/tokens/{tokenid}')
.onCreate(async (tokenSnap, conetxt) => {
在上述函数中,您已将参数传递为conetxt
,随后在函数context
中使用了参数,因为它会导致undefined
错误。
将参数名称conetxt
更改为context
。