【问题标题】:Issues with req.query, req.params, req.body using express+axios in MERN app在 MERN 应用程序中使用 express+axios 的 req.query、req.params、req.body 问题
【发布时间】:2021-10-02 12:48:33
【问题描述】:

我正在尝试使用 axios 在 React 中进行以下调用:

axios.get(`http://localhost:5000/daily_batches/num_tweets_by_tag_and_date/`, {
            params: {
                tag: "Green/Sustainable Energy",
                date: "2021-05-07"
            }
        })
        .then(res => {
            console.log(res)
        })

我应该在我的快速路由中使用 req.params、req.body 或 req.query 以使 axios 调用成功吗?如果我使用 req.params,像这样:

router.route('/num_tweets_by_tag_and_date/').get(async (req, res) => {
    try {
      const tag = req.params.tag; 
      const date = req.params.date;
      const tag_num_tweets_field = "tags." + tag + ".num_tweets"
      const num_tweets_data = await DailyBatch.findOne({"date": date}, {[tag_num_tweets_field]: 1, "_id": 0});
      res.json(num_tweets_data)
    } catch (err) {
      console.log(err)
      res.status(400).json({
        errors: {
          global: "An error occurred."
        }
      })
    }
  });

我得到一个“data:null”,如屏幕截图所示。事实上,通过在路线中执行 console.log(req.params.tag) 和 console.log(req.params.date) 我得到“未定义”

如果我使用 req.body.tagreq.body.date 而不是 req.params.tag 和 req.params.date,我仍然会得到“未定义” " 当我使用 console.log(date) 和 console.log(tag) 时。并且 api 响应仍然是“data:null”。然而,在 Insomnia 中,api 调用工作正常并返回预期的数据,如下图所示:

如果我使用 req.query.datereq.query.tag,我在 React 中进行的 axios api 调用中成功获取了数据。但是,调用在 Insomnia 中不起作用,我得到“null”。

我似乎无法找到一种方法来使用 axios 在 React 中进行 get 调用并传递带有调用参数的字典,同时能够在 Insomnia 中调用同一端点。我发现的唯一方法是使用 req.param("tag")req.param("date") 但显然它已被弃用,所以我不想使用它。

我已经阅读了多篇关于 req.params、req.body 和 req.query 的帖子,但我阅读的越多,我就越感到困惑。任何帮助将不胜感激!

【问题讨论】:

    标签: reactjs api express axios request


    【解决方案1】:

    可能是 req.body。

    如果您使用变量设置路由,则使用

    req.params,例如

    router.get('/users/:id', (req, res)=>{})
    

    您可以console.log(req.body)查看。

    【讨论】:

    • 感谢您的回答。正如我在我的问题中所说,我已经尝试过使用 req.body 但它仅在我从 Insomnia 调用端点时才有效。当我使用 Axios 在 React 中进行调用时,req.body 是未定义的。
    • 尝试将参数更改为数据。另请参阅此处的第一个示例:axios-http.com/docs/api_intro
    【解决方案2】:

    req.params 在你有动态路由时使用。 示例= /:num_tweets_by_tag_and_delete 在这里查看:Node.js: req.params vs req.body

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-11
      • 2023-03-11
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      • 1970-01-01
      • 2021-01-31
      • 2021-04-06
      相关资源
      最近更新 更多