【问题标题】:Why is req.query always empty?为什么 req.query 总是空的?
【发布时间】:2020-01-05 02:36:21
【问题描述】:

我正在尝试向 Express 发出 POST 请求,但无论何时我都无法访问 req.query。它总是空的。

POST 请求在 Postman 中工作,但我无法让它在 React 中工作。

我想知道 Express 中间件是否无法读取 axios 发送的任何内容。 我是 Express 的新手,所以我确定我缺少一些基本的东西。感谢阅读!

来自我的 React 文件:

tryPost = () => {
  axios.post('/login', {
    firstName: 'Tom',
    lastName: 'Rains'
  });
}

来自我的 Express 文件:

app.post('/login', (req, res) => {
  console.log('test'); //prints test
  console.log(req.query); //prints as {}
})

【问题讨论】:

  • 查看帖子正文中的内容。在我看来,查询应该是这样的“login/?firstName=Tom&lastName=Rains”,也许你已经把你的“查询”放在了帖子正文中。请尝试 req.body 看看有什么。 :)
  • @Neal.Marlin 除非还设置了正确的正文解析中间件,否则答案将一无所获:)
  • @James 是的,你是对的。我只是认为已经做了正确的事情。 :) 因为我们不是在讨论如何配置 express 中间件
  • 大家好,你是对的,我没有正确的正文解析中间件。感谢 cmets :)

标签: reactjs express axios


【解决方案1】:

req.query 指的是 查询字符串 参数,在您的示例中,您发布一个 JSON 格式的 body,没有发送查询字符串参数,因此 req.query 为空。

根据您打算发布数据的方式,如果您想将其作为查询字符串数据传递,那么您需要这样做:

axios.post('/login?firstName=Tom&lastName=Rains');

然后您的代码将按原样运行。但是,如果您想将数据作为正文发布(如您的示例),则需要在您的快速应用程序中应用额外的更改,即

app.use(express.json())

这将确保 JSON 正文被解析,然后您可以从您的路由通过 req.body 访问数据。

注意 - 确保在设置路线之前 配置此设置

【讨论】:

  • 谢谢!!我刚刚将 app.use(express.json()) 添加到我的 Express 中,它现在可以工作了!这个答案非常清楚,帮助我理解了 req.body 和 req.query 之间的区别。现在是我深入了解这个 MERN 应用程序的时候了! :D
猜你喜欢
  • 2020-07-20
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-21
相关资源
最近更新 更多