基于Express.js、MongoDB和Stripe的电商购后MongoDB更新问题
问题描述
我正在开发一个基于Express.js、MongoDB和Stripe的电商网站,这是我首个处理交易与数据库的项目。项目架构如下:
- 产品信息存储在MongoDB
- 支付逻辑由Stripe处理
- 服务器通过Express.js搭建
目前已实现成功支付,但无法更新MongoDB中的数据。Stripe返回的购买响应仅包含Stripe ID,我希望能关联保存MongoDB ID。尝试在商品对象中添加自定义字段时出现报错,请问是否有办法更新或删除已购买的商品?
以下是Stripe相关的app.js代码片段:
app.post("/buy", async (req, res) => { const id = req.body.id; const p = await Product.find(({_id: id})); try { let items = []; for(const i in p) { const item = p[i]; items.push({ price_data: { currency: "eur", product_data: { name: item.title, }, unit_amount: item.price }, quantity: item.in_stock }); } const session = await stripe.checkout.sessions.create({ payment_method_types: ["card"], mode: "payment", success_url: `${process.env.SERVER_URL}/thanks?session_id={CHECKOUT_SESSION_ID}`, cancel_url: `${process.env.SERVER_URL}/`, line_items: items, }); res.json({url: session.url}); } catch(err) { res.status(500).json({ message: err.message }); } }); app.get("/thanks", async (req, res) => { try { const session = await stripe.checkout.sessions.retrieve(req.query.session_id); stripe.checkout.sessions.listLineItems( req.query.session_id, function(err, lineItems) { // asynchronously called console.log(lineItems); } ); } catch(err) { res.redirect(process.env.SERVER_URL); } res.render("thanks", {home_url: process.env.SERVER_URL}); });
已解决方案
通过session.metadata字段实现关联MongoDB ID,后续可通过await stripe.checkout.sessions.retrieve(SESSION_ID)获取包含自定义元数据的会话信息。
这是个简单的错误,但对新手来说确实容易迷惑。
内容的提问来源于stack exchange,提问作者Gustav
相关产品推荐
相关产品推荐

