javascript - 解决 Cloud Functions 中的“TypeError:无法读取未定义的属性‘数据’”
问题描述
抱歉,如果这似乎是一个非常基本的问题,云功能的概念对我来说是非常新的,我仍然处于学习过程中。
但是,在尝试执行此云功能时,出现以下错误
TypeError: Cannot read property 'data' of undefined
完整的日志可以在这里看到
作为参考,我没有制作这个功能,我只是想让它工作,我使用了这个视频。
实际的云功能:
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 });})
我用于编写支付服务的飞镖代码:
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);
});
正如您所看到的,代码显然被触发了,但我猜 data var 存在某种错误,JavaScript 对我来说是全新的,所以我确定它是某种非常愚蠢的语法问题。
解决方案
从附加的日志图像中,错误是context is not defined
functions.firestore.document('cards/{userid}/tokens/{tokenid}')
.onCreate(async (tokenSnap, conetxt) => {
在上面的函数中,您已经传递了参数 asconetxt
和稍后在函数context
中使用,因此它给出了undefined
错误。
将参数名称更改conetxt
为context
.
推荐阅读
- python - Django:如何将变量从视图传递到模板
- python-3.x - Sklearn TruncatedSVD 没有按降序显示解释的方差比率,或者第一个数字意味着别的什么?
- python - 如何在 Python Pandas 中将部分列转换为日期?
- c# - 实体类型 + 的实例无法追踪,因为另一个实例具有相同的键值
- pycharm - 查看在 PyCharm 中播放的动画 GIF
- reactjs - React-virtualized - 是否可以在窗口调整大小时更新 rowHeights?
- windows - 在 C++ 中截取窗口(句柄)的屏幕截图
- raspberry-pi - Sudo apt update 在 rassbery pi 上返回错误示例:N 中的四个:跳过获取已配置文件“main/binary-amd64/Packages”作为存储库
- ios - 在 iOS 中将缓存文件保存到磁盘
- javascript - 检查移动设备上是否启用了 cookie(iOS 上的 Chrome)