【问题标题】:Why Axios GET request sending twice in Node Express?为什么 Axios GET 请求在 Node Express 中发送两次?
【发布时间】:2021-09-27 19:52:07
【问题描述】:

我编写了一个非常简单的 Express 应用程序,它使用 Axios 从 API 获取数据。

我使用 Google Chrome 进行了测试,并且能够成功获取 API 数据。但是检查控制台日志,似乎来自 Axios 的 GET 请求运行了 2 次。 1次成功,1次失败。

我不确定这是否按预期工作,或者我做错了什么。任何帮助将不胜感激。

代码如下

const app = express()

app.get('/:id' , (req, res)=>{

    const fullURL = url + req.params.id
    
    axios.get( fullURL , {
        params: {
            apikey: apikey,
            limit: 10
        }
    }).then((response)=>{
        console.log('Success')
        res.send(response.data)
        
    }).catch((error)=>{
        console.log('Error')
    })
})

app.listen(PORT, ()=>{
    console.log(`App is running on port ${PORT}`);
})

以下是我的控制台日志结果

成功
错误

【问题讨论】:

  • 我认为 .then 无论请求成功还是失败都会发生。这意味着请求只发生了一次,但失败了。
  • 您的代码没有问题,您确定您没有发送 2 个请求吗?
  • “res.send(response.data)”可能会产生一个错误,然后 .catch 会捕获该错误。您是否尝试过注释掉该行?
  • 在 .catch(或至少 error.message)中记录实际错误会很有帮助。这可能会更深入地了解正在发生的事情。
  • 根据建议,我刚刚也用 POSTMAN 进行了测试,只有 1 个请求出现。我猜是用谷歌浏览器测试是导致问题的原因。

标签: node.js express axios


【解决方案1】:

尝试打印请求中的 id。 我相信浏览器发送的 /favicon.ico 请求被视为您的 api 中的 id。 因此,第一个请求是具有正确 ID 的正确请求,它会为您提供成功响应。下一个请求是 favicon.ico 请求,它会从 axios 获取错误! 因为我使用浏览器和邮递员观察到了同样的情况。 从浏览器-> 我收到 2 个请求, 来自邮递员 -> 我收到 1 个请求

【讨论】:

  • 我按照您的建议测试了 POSTMAN。它仅作为 1 个结果正确返回。所以我猜浏览器不知何故调用了 REST API 两次,原因不明,但只要不是我的代码错误,我完全可以接受。
【解决方案2】:

也许尝试打印您在 catch 块中收到的错误对象。 我的猜测是你进入 then 块,打印“成功”,然后你可能在 send 函数中遇到异常,然后你到达 catch 块并打印“错误”。

【讨论】:

    猜你喜欢
    • 2019-09-13
    • 2015-05-16
    • 2016-07-01
    • 2019-12-11
    • 2017-03-28
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多