在结帐功能中执行 select 查询

performing select query inside checkout function

我有这个功能,代码如下:

 app.post('/create-checkout-session', async (req, res) => {
    console.log(req.session.username)
    let price = ""
    var getUserPaymentData = "select * from INVOICES where USER = '" + req.session.username + "'"
    ibmdb.open(ibmdbconnMaster, function(err, conn) {
        if (err) return console.log(err);
        conn.query(getUserPaymentData, function(err, rows) {
            if (err) {
                console.log(err);
            }

            
            for (var i = 0; i < rows.length; i++) {
                console.log("rows of lengths are: " + rows.length)
                var price1 = rows[i]["AMOUNTOWED"]
                console.log(rows[i]["USER"])
                price = parseInt(price1)
                console.log(price1)
            }
            conn.close(function() {
                console.log("closed the function /create-checkout-session");
            });
            });
        })

       console.log(price)

  const session = await stripe.checkout.sessions.create({
    payment_method_types: ['card'],
    line_items: [
      {
        price_data: {
          currency: 'usd',
          product_data: {
            name: 'Marcos Swim School Payment',
          },
          unit_amount: price,
        },
        quantity: 1,
      },
    ],
    mode: 'payment',
    success_url: `https://xxx.ca/`,
    cancel_url: `https://xxx.ca/cancel`,
  });

  res.json({ id: session.id });
 
});

我基本上是在检查用户欠我多少钱,然后重定向到结帐处。但是,它完全跳过查询并且不记录任何内容,然后抛出未定义价格的错误。这是因为我在查询 table 后尝试设置价格。我该如何解决这个问题?

ibmdb.open 是一个使用回调的函数,因此它会立即 returns。如果它支持 async/await,您需要 await 它的结果,或者将其下面的所有代码 - const session = await stripe.checkout.sessions.create()res.json() 调用 - 移动到回调中。