【问题标题】:req.query in Express.js is undefinedExpress.js 中的 req.query 未定义
【发布时间】:2021-07-04 17:17:14
【问题描述】:

我在 MERN 应用程序中实现 Stripe Checkout

客户成功付款后,他/她会被重定向到结帐成功 URL,屏幕上会显示 CheckoutSuccess 页面。此外,Stripe 在 URL 中发送session_id,如下图所示。

CheckoutSuccess 页面呈现时,我向/api/order/success 发送POST 请求。在路由处理函数中,我需要访问Stripe发送的session-id(在URL中)。

我面临的问题是当我尝试 console.log req.query 时,我得到一个空白对象;因此req.query.session_id 返回undefined

为什么req.query 是一个空白对象?

sn-ps的代码如下: orderRoutes.js

const express = require("express");
const asyncHandler = require("express-async-handler");
const dotenv = require("dotenv");
dotenv.config();

const stripe = require("stripe")(process.env.STRIPE_SECRET_KEY);

const router = express.Router();

router.post(
  "/success",
  asyncHandler(async (req, res) => {
    console.log(req.query);
    const session = await stripe.checkout.sessions.retrieve(
      req.query.session_id
    );
    const customer = await stripe.customers.retrieve(session.customer);
    res.send(customer);
  })
);

module.exports = router;

orderSlice.js

import { createSlice, createAsyncThunk } from "@reduxjs/toolkit";
import axios from "axios";

const initialState = {
  status: "idle",
  customer: null,
  error: null,
};

export const fetchCustomer = createAsyncThunk(
  "order/fetchCustomer",
  async (_, { rejectWithValue }) => {
    try {
      const { data } = await axios.post("/api/order/success");
      return data;
    } catch (err) {
      return rejectWithValue(err.response.data);
    }
  }
);

export const orderSlice = createSlice({
  name: "order",
  initialState,
  reducers: {},
  extraReducers: {
    [fetchCustomer.pending]: (state, action) => {
      state.status = "loading";
    },
    [fetchCustomer.fulfilled]: (state, action) => {
      state.status = "succeeded";
      state.customer = action.payload;
    },
    [fetchCustomer.rejected]: (state, action) => {
      state.status = "failed";
      state.error = action.payload.message;
    },
  },
});

export default orderSlice.reducer;

【问题讨论】:

  • 您需要使用'/api/order/success' + location.search将查询字符串附加到url
  • 如果你使用 POST 方法,你应该使用req.body,因为当方法是 GET 时使用req.query
  • @Gleny 我不这么认为。
  • @Molda 查询字符串已经存在于 URL 中,由 Stripe 返回。为什么我需要附加它?
  • 您的 fetch() 调用没有传递任何数据或查询参数,对吧?这似乎是这里的问题

标签: javascript node.js express stripe-payments mern


【解决方案1】:

退出评论并进入答案

您的 fetch() 调用没有传递任何数据或查询参数,对吧?这似乎是这里的问题

【讨论】:

    猜你喜欢
    • 2018-07-11
    • 2022-11-11
    • 1970-01-01
    • 2012-02-28
    • 2012-12-10
    相关资源
    最近更新 更多