【问题标题】:TypeError: Cannot destructure property 'line_items' of 'req.body' as it is undefinedTypeError:无法解构“req.body”的属性“line_items”,因为它未定义
【发布时间】:2022-01-18 06:31:03
【问题描述】:

由于此错误,我没有收到邮递员的任何回复。我试图添加 app.use(express.json());在 index.js 但仍然无法正常工作。关于如何解决这个问题的任何想法?

const stripeAPI = require('../stripe');

async function createCheckoutsession(res, req) {
  const domainUrl = process.env.WEB_APP_URL;
  const { line_items, customer_email } = req.body;
  if (!line_items || !customer_email) {
    return res.status(400).json({ error: 'missing required session paramaters' });
  }
  
  let session;
  
  try {
    session = await stripeAPI.checkout.sessions.create({
      payment_method_types: ['card'],
      mode: 'payment',
      line_items,
      customer_email,
      success_url: `${domainUrl}/success?session_id={CHECKOUT_SESSION_ID}`,
      cancel_url: `${domainUrl}/canceled`,
      shipping_address_collection: { allowed_countries: ['GB', 'US'] }
    });
    res.status(200).json({ sessionId: session.id, });
  } catch (error) {
    console.log(error);
    res.status(400).json({ error: 'an error occurred, unable to create session' });
  }
}

module.exports = createCheckoutsession;

(index.js)

const express = require('express'); const cors = require('cors');

require('dotenv').config({ path: './.env' });

const createCheckoutSession = require('./api//checkout');

const app = express();

常量端口 = 8080;

app.use(express.json());

app.use(cors({origin: true}));

app.get('/', (req, res) => res.send('HELLO WORLD!'));

app.post('/create-checkout-session', createCheckoutSession);

app.listen(port, () => console.log('服务器监听端口', port));

(stripe.js)

const stripeAPI = require('stripe')(process.env.SECRET_KEY);

module.exports = stripeAPI;enter code here

【问题讨论】:

  • { "line_items": [ { "quantity": 1, "price_data": { "currency": "usd", "unit_amount": 2800, "product_data": { "name": " Cumulus", "description": "Light as air", "images": [ "i.ibb.co/NtpJ0XQ/cumulus-olive.png" ] } } ], "customer_email": "hellothere@gmail.com" }
  • 嗨菲尔,我已经上传了邮递员的截图
  • 好的,一切看起来都很好。你能说明你在哪里添加app.use(express.json()) 以及你在哪里将createCheckoutsession 绑定到/create-checkout-session 路径吗?请注意,您的 JSON 中间件应该在之前 app.post("/create-checkout-session", createCheckoutsession) 注册(或者您已经设置了该处理程序)
  • app.use(express.json()) 在 index.js 中,我在这里更新了它,以便您可以看到.. 它在 app.post("/create-checkout -会话”

标签: node.js postman stripes


【解决方案1】:

我假设您使用的是 Express 服务器?

您的路由处理程序使用了错误的参数:

// Wrong
async function createCheckoutsession(res, req) {
}

// Correct 
async function createCheckoutsession(req, res) {
}

【讨论】:

  • iKoala,谢谢你……我没有马上注意到……我从邮递员那里得到“发生错误,无法创建会话”,我想得到sessionID 作为邮递员响应
  • 我认为这是 Stripe API 的另一个错误,与您在问题标题中所述的错误不同。
  • 好发现! ?
【解决方案2】:

试试

app.use(bodyParser.urlEncoded({extended:false}))

【讨论】:

  • 正文解析器已弃用。请改用express.urlencoded()
  • 另外,看起来 OP 正在发布 JSON
  • 感谢您的回复。试过 app.use(bodyParser.urlEncoded({extended:false})) 和 express.urlencoded() 都不起作用。
  • 你必须通过 npm 下载 body-parser 然后导入到你的项目中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-07
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 2021-05-11
  • 2021-04-04
  • 2021-08-30
相关资源
最近更新 更多