SpringBoot+VUE+Axios 【链接超时】 后端正常返回结果,前端却出现错误无法接收数据

文章讲述了在Vue前端使用Axios发送请求时遇到超时的问题,分析了可能的原因,包括请求超时时间过短、网络问题、数据量大和服务器性能等。提出了解决方案,主要是通过增加Axios的请求超时时间,例如设置为20000ms,并展示了如何在全局或局部配置中修改超时时间。此外,文章还给出了具体的代码示例来展示如何实施这个解决方案。
摘要由CSDN通过智能技术生成

一、错误原因及解决思路

错误提示表明前端发送的请求在默认的 2500ms 超时时间内没有得到服务器的响应,导致请求失败。尝试以下方法来解决这个问题:

  1. 增加请求超时时间:可以通过配置 Axios 请求对象的 timeout 属性来增加请求的超时时间,例如将其设置为 5000ms。
  2. 检查网络连接:如果网络连接存在问题,可能会导致请求响应不及时或超时。请确保网络连接稳定,并且没有防火墙或代理服务器阻止了请求的传输。
  3. 削减请求数据量:如果正在向服务器发送大量数据,可能会导致请求响应时间过长。请检查发送的请求数据,考虑削减其数据量或者优化其结构。
  4. 检查服务器状态:如果服务器存在负载过重或性能问题,可能会导致请求响应时间延迟或超时。请确保服务器状态正常,并且可以处理发送的请求。

通过以上方法中的任意一种或多种,都可以尝试解决 Vue 前端发送请求超时的问题。

二、我的解决方案

上下文环境: SpringBoot+VUE+Axios,前端发送请求,后端接收后向用户邮件发送验证码,邮件发送完毕,后端给前端反馈。

出现链接超时的原因: 后端发送邮件耗时长,超过了axios默认的超时时间

解决方案: 设置axios超时时间为更长的时间

原请求方法为:

this.$axios
	.post("http://localhost:xxxx/oa/user/sendEmailVerCode",param)
	.then(rst => {
		this.emailCodeForm.afterEndCode = rst.data;
		this.emailCodeForm.sendCodeFlag=true;// 已发送验证码
		console.log(rst.data)
	}).catch(ex => {
	console.log(ex);
	});

在使用 $axios 发送请求时,通过配置 timeout 属性来增加请求的超时时间。具体实现方法如下:

this.$axios
  .post("http://localhost:xxxx/oa/user/sendEmailVerCode", param, {
    // 将超时时间设置为 20000ms
    timeout: 20000,
  })
  .then((rst) => {
    this.emailCodeForm.afterEndCode = rst.data;
    this.emailCodeForm.sendCodeFlag = true; // 已发送验证码
    console.log(rst.data);
  })
  .catch((ex) => {
    console.log(ex);
  });

在上述代码中,我们在 $axios.post() 方法的第三个参数中,将 timeout 属性设置为 20000ms,这意味着如果请求在 20000ms 内没有得到响应,Axios 会自动将其视为超时错误并返回一个错误信息。然后,我们可以通过 .then().catch() 方法处理请求的响应结果和错误信息。

需要注意的是,也可以在创建全局的 $axios 实例时设置默认的超时时间,例如:

import axios from 'axios';

const instance = axios.create({
  baseURL: 'http://localhost:xxxx',
  timeout: 20000, // 默认的超时时间
});

export default ({ app }, inject) => {
  inject('axios', instance);
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值