【发布时间】:2022-01-09 12:44:07
【问题描述】:
错误发生在 if cart[1] 购物车[1] 带有下划线,我无法将代码部署到 Vercel。
以为是条带问题,但我彻底检查了条带 API,这段代码尽我所能理解。
这是完整的文件。它是一个 .ts 扩展名
import { NextApiRequest, NextApiResponse } from "next";
import Stripe from "stripe";
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, {
apiVersion: "2020-03-02",
});
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
if (req.method === "POST") {
try {
const cartItems = req.body;
const line_items = validateCartItems(cartItems);
const subscriptionInCart = isSubscriptionInCart(cartItems);
const params: Stripe.Checkout.SessionCreateParams = {
mode: subscriptionInCart ? "subscription" : "payment",
payment_method_types: ["card"],
billing_address_collection: "auto",
shipping_address_collection: {
allowed_countries: ["US", "CA"],
},
line_items,
success_url: `${req.headers.origin}/result?session_id=. {CHECKOUT_SESSION_ID}`,
cancel_url: `${req.headers.origin}/use-shopping-cart`,
};
const checkoutSession: Stripe.Checkout.Session =
await stripe.checkout.sessions.create(params);
res.status(200).json(checkoutSession);
} catch (err: any) {
res.status(500).json({ statusCode: 500, message: err.message });
}
} else {
res.setHeader("Allow", "POST");
res.status(405).end("Method Not Allowed");
}
}
const validateCartItems = (cartDetails: any) => {
const validatedItems = [];
for (const sku in cartDetails) {
const product = cartDetails[sku];
const item = {
price: product.sku,
quantity: product.quantity,
};
validatedItems.push(item);
}
return validatedItems;
};
const isSubscriptionInCart = (cartDetails: any) => {
let subscriptionFound = false;
for (const cartItem of Object.entries(cartDetails)) {
if (cartItem[1].recurring) {
subscriptionFound = true;
}
}
return subscriptionFound;
};
【问题讨论】:
-
如果出现错误,程序如何工作?
-
它本身工作,它在本地工作并执行所有功能。它是一个电子商务,我可以创建订阅并将其记录在我的条纹仪表板上——这就是我所说的作品。
-
图编译器抱怨值类型将代码更改为: const isSubscriptionInCart = (cartDetails: any) => { let subscriptionFound = false; let recurring = cartDetails try { for (const cartItem of Object.entries(cartDetails)) { if (cartItem[1]= recurring) { subscriptionFound = true; } } } 捕捉(错误){ console.log(错误); } 返回订阅发现; };
-
您应该在
validateCartItems和isSubscriptionInCart函数中正确键入cartDetails,以避免出现类似这样的潜在问题。 -
因为
cartDetails的类型为any,所以运行(const cartItem of Object.entries(cartDetails))意味着cartItem的类型为[string, unknown],这会导致问题,因为TypeScript 期望cartItem[1]是@987654331 @ 并且不包含属性recurring。正确输入cartDetails可以解决这个问题 -cartDetails的格式是什么?
标签: reactjs typescript next.js