Express.js 中的 req.query 未定义
req.query in Express.js is undefined
我正在 MERN 应用程序中实施 Stripe Checkout
。
客户成功付款后,he/she 被重定向到结帐成功 URL,其中 CheckoutSuccess
页面呈现在屏幕上。此外,Stripe 在 URL 中发送了一个 session_id
,如下图所示。
当 CheckoutSuccess
页面呈现时,我向 /api/order/success
发送了一个 POST
请求。在路由处理函数中,我需要访问 Stripe 发送的 session-id
(在 URL 中)。
我面临的问题是当我尝试 console.log req.query
时,我得到一个空白对象;因此 req.query.session_id
returns undefined
。
为什么 req.query
是一个空白对象?
代码片段如下:
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;
离开评论进入答案
您的 fetch() 调用没有传递任何数据或查询参数,对吧?这似乎是这里的问题
我正在 MERN 应用程序中实施 Stripe Checkout
。
客户成功付款后,he/she 被重定向到结帐成功 URL,其中 CheckoutSuccess
页面呈现在屏幕上。此外,Stripe 在 URL 中发送了一个 session_id
,如下图所示。
当 CheckoutSuccess
页面呈现时,我向 /api/order/success
发送了一个 POST
请求。在路由处理函数中,我需要访问 Stripe 发送的 session-id
(在 URL 中)。
我面临的问题是当我尝试 console.log req.query
时,我得到一个空白对象;因此 req.query.session_id
returns undefined
。
为什么 req.query
是一个空白对象?
代码片段如下: 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;
离开评论进入答案
您的 fetch() 调用没有传递任何数据或查询参数,对吧?这似乎是这里的问题