You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Redux与Express.js中正确实现带参数的GET请求?

解决Redux + Express GET请求传递日期参数的问题

你已经精准定位了报错原因:GET请求不能带请求体,并且已经把前端的参数改成了URL查询字符串,这步是对的!现在问题出在后端获取参数的方式错误,我来帮你一步步解决:

核心问题分析

你的前端代码已经把日期参数拼到了URL的查询部分(比如 custom-profit-report?param1=2024-01-01&param2=2024-01-31),但后端还在尝试从 req.params 里拿值——req.params 是用来获取URL路径参数的(比如 /custom-profit-report/:startDate/:endDate 这种格式里的变量),而查询参数需要用 req.query 来获取。

具体修改步骤

1. (可选但更友好)优化前端参数命名

你当前用 param1 和 param2 作为参数键,改成和业务对应的 startDate、endDate 会让代码更易读,避免后续维护时混淆:

export const getCustomProfitReport = (startDate, endDate) => (dispatch) => {
  dispatch(customProfitReportLoading(true))
  const bearer = 'Bearer ' + localStorage.getItem('token')
  // 改用语义化的参数名
  let params = { startDate, endDate }
  let query = Object.keys(params)
    .map(k => encodeURIComponent(k) + '=' + encodeURIComponent(params[k]))
    .join('&')
  return fetch(baseUrl + 'custom-profit-report?' + query, {
    method: 'GET',
    headers: { 'Authorization': bearer }
  })
  // 后续的响应处理代码保持不变
}

2. 必须修改:后端改用req.query获取参数

把后端获取日期的代码从 req.params 改成 req.query,同时可以加个简单的参数校验,避免空参数导致查询异常:

customProfitRouter.route('/')
.options(cors.corsWithOptions, (req, res) => { res.sendStatus(200) })
.get(cors.cors, authenticate.verifyUser, authenticate.verifyAdmin, (req,res,next) => {
  // 从req.query中获取查询参数,对应前端的键名
  let start = req.query.startDate
  let end = req.query.endDate

  // 可选:添加参数校验,确保请求携带了必要参数
  if (!start || !end) {
    const error = new Error('请求必须包含startDate和endDate参数')
    error.status = 400
    return next(error)
  }

  Sales.find({ "createdAt": { $gte: start, $lte: end } })
  .populate('property')
  .populate('fee')
  .then((sales) => {
    res.statusCode = 200
    res.setHeader('Content-Type', 'application/json')
    res.json(sales)
  }, (err) => next(err))
  .catch((err) => next(err))
})

关于前后端是否需要同时修改?

  • 如果你不想改前端的 param1/param2,后端只要改成 req.query.param1 和 req.query.param2 也能正常工作,但语义化的参数名更利于长期维护。
  • 必须修改的只有后端的参数获取方式,这是解决当前问题的关键。

修改完成后,你可以先用Postman测试 GET /custom-profit-report?startDate=2024-01-01&endDate=2024-01-31 确认后端能返回正确数据,再测试Redux端的请求,应该就不会报错了。

内容的提问来源于stack exchange,提问作者arkanoid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:28:44