前端开发:axios在vue中的使用

简介: 前端开发:axios在vue中的使用

Aixos

1、Aixos特性

(1)支持Promise API

(2)拦截请求和响应

(3)装换请求数据和响应数据

(4)取消请求

(5)自动转换JSON数据

(6)客户端支持防御XSRF

2、Axios基础用法

get post put等请求方法

3、Axios进阶用法

实例 配置 拦截器 取消请求

4、Axios进一步封装

Axios基础用法

文档:https://www.npmjs.com/package/axios

1、axios请求方法

get      # 获取数据
post     # 提交数据(表单提交+文件上传)
put      # 更新数据(所有数据推送到后端)
patch    # 更新数据(只将修改的数据推送到后端)
delete   # 删除数据

2、项目环境搭建

# 安装vue

$ npm install -g @vue/cli --registry=https://registry.npm.taobao.org
$ npm install -g serve
$ vue --version # 3.9.3

$ npm uninstall -g @vue/cli # 卸载

$ vue create hello-world # 创建项目

(1)选择自定义,增加以下两个选项
router
css processer

(2)选择默认配置,可以自定义添加以下3个插件
$ vue add @vue/eslint # 安装插件
$ vue add router
$ vue add vuex

$ cd hello-world
$ npm run serve # 启动项目
$ npm run build # 打包压缩

# -s 参数的意思是将其架设在 Single-Page Application 模式下
# 这个模式会处理即将提到的路由问题
serve -s dist

安装axios

npm install axios

3、路由引入

// 方式一 
// 不管有没有访问都加载
import Home from './views/Home.vue'

component: Home


// 方式二
// 访问时才加载,异步加载,懒加载
component: () => import('./views/Home.vue')

4、axios在vue项目中使用实例

import Axios from "axios";

export default {
name: "mydata",

created() {

let data = {
name: "Tom"
};

/**
* GET
* /getData.json?name=Tom
*/
Axios.get("/getData.json", {
params: data
}).then(response => {
console.log(response);
});

/**
* POST
*/

// Content-Type: application/json
Axios.post("/PostJsonData.json", data).then(response => {
console.log(response);
});

// Content-Type: multipart/form-data
let formData = new FormData();
for (let key in data) {
formData.append(key, data[key]);
}

Axios.post("/PostFormData.json", formData).then(response => {
console.log(response);
});

// Content-Type: application/x-www-form-urlencoded
import qs from 'qs';

Axios.post("/PostFormData.json", qs.stringify(data)).then(response => {
console.log(response);
});

/**
* PUT
* Content-Type: application/json
*/
Axios.put("/PutData.json", data).then(response => {
console.log(response);
});

/**
* PATCH
* Content-Type: application/json
*/
Axios.patch("/PatchData.json", data).then(response => {
console.log(response);
});

/**
* DELETE
*/

// /DeleteData.json?name=Tom
Axios.delete("/DeleteData.json", {
params: data
}).then(response => {
console.log(response);
});

// Content-Type: application/json
Axios.delete("/DeleteData.json", {
data: data
}).then(response => {
console.log(response);
});

/**
* Axios
*/
Axios({
url: "/url",
method: "GET",
params: data, // url 参数
data: data // 请求体参数
}).then(response => {
console.log(response);
});
}
};

5、并发请求

同时进行多个请求,并统一处理返回值

/**
* 并发请求
*/
Axios.all([
Axios.get("/data.json"),
Axios.get("/city.json")
]).then(
Axios.spread((dataRes, cityRes) => {
console.log(dataRes, cityRes);
})
);

axios进阶用法

1、axios实例

后端接口地址有多个,并且超时时长不一样

代码实例


import axios from "axios";

export default {
name: "axiosDemo",

created() {
let instance = axios.create({
baseURL: "http://localhost:8080",
timeout: 1000 // 1s
});

instance.get("/data.json").then(response => {
console.log(response);
});
}
};

2、axios配置参数

参数

说明

示例

baseURL

请求的域名,基本地址

http://localhost:8080”

timeout

请求超时时长,毫秒

1000

url

请求路径

“/data.json”

method

请求方法

“get/post/put/patch/delete”

headers

请求头

{“token”: “”}

params

url参数

{}

data

body参数

{}


(1) axios全局配置

axios.defaults.baseURL = "http://localhost:8080";
axios.defaults.timeout = 1000;

(2) axios实例配置

let instance = axios.create();
instance.defaults.timeout = 2000;

(3) axios请求配置

instance.get("data.json", {
timeout: 3000
});

3、实际开发示例

有两个请求接口

http://localhost:8081

http://localhost:8082

let instance1 = axios.create({
baseURL: "http://localhost:8081",
timeout: 1000
});

let instance2 = axios.create({
baseURL: "http://localhost:8082",
timeout: 2000
});

/** 用到的参数
* baseURL、timeout、method、params
*/
instance1.get("/data.json", {
params: {"name": "Tom"}
}).then(
response => {}
);

/** 用到的参数
* baseURL、timeout、method
*/
instance2.get("/data.json", {
timeout: 5000 // 重新赋值
}).then(
response => {}
);

4、axios拦截器

拦截器:在请你去或响应被处理前拦截它们

(1)请求拦截器

axios.interceptors.request.use(
config => {
// 在请求发送前处理
return config;
}, err => {
// 在请求错误时候处理
return Promise.reject(err);
});

(2)响应拦截器

axios.interceptors.response.use(
res => {
// 在请求成功对响应数据处理
return config;
}, err => {
// 在响应错误时候处理
return Promise.reject(err);
});

(3)取消拦截器


let interceptors = axios.interceptors.request.use(
config => {
config.headers = {
auth: true
};
return config;
});


axios.interceptors.request.eject(interceptors);

代码实例


/**
* 不需要登录的接口
*/
let newInstance = axios.create({});


/**
* 登录状态 token
*/

let instance = axios.create({});

instance.interceptors.request.use(
config => {
config.headers.token = "token";
return config;
});


/**
* 移动开发
*/
let phoneInstance = axios.create({});

// 请求前显示弹框
phoneInstance.interceptors.request.use({
config => {
$("#model").show();
return config;
}
});

// 请求后隐藏弹框
phoneInstance.interceptors.response.use({
res => {
$("#model").hide();
return res;
}
})

5、axios错误处理


axios.interceptors.request.use(
config => {
return config;
}, err => {
return Promise.reject(err);
});

axios.interceptors.response.use(
res => {
return config;
}, err => {
return Promise.reject(err);
});


axios.get("/data.json").then(
res => {
// 请求成功
}
).catch(
err => {
// 请求错误
})


// 实际开发中,添加统一的错误处理
let instance = axios.create({});

instance.interceptors.request.use(
config => {
return config;
}, err => {
// 请求错误,一般http状态码以4开头,401超时,404 not find
$("#model").show();
setTimeout(()={
$("#model").hide();
}, 2000);
return Promise.reject(err);
});

instance.interceptors.response.use(
res => {
return res;
}, err => {
// 响应错误,一般http状态码以5开头,500系统错误,502系统重启
$("#model").show();
setTimeout(()={
$("#model").hide();
}, 2000);
return Promise.reject(err);
});

instance.get("/data.json").then(
res=>{

}).catch(
err=>{

})

6、axios取消请求

取消正在进行的http请求

使用情况:商城 3-5秒

let source = axios.CancelToken.source();

axios.get("/data.json", {
CancelToken: source.token
}).then(
res=>{

}).catch(
err=>{

});

// 取消请求 message可选
source.cancel("cancel http");


            </div>
目录
相关文章
|
2月前
|
JavaScript
Vue中Axios网络请求封装-企业最常用封装模式
本教程介绍如何安装并配置 Axios 实例,包含请求与响应拦截器,实现自动携带 Token、错误提示及登录状态管理,适用于 Vue 项目。
115 1
|
6月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
637 1
|
7月前
|
移动开发 前端开发 JavaScript
Vue与React两大前端框架的主要差异点
以上就是Vue和React的主要差异点,希望对你有所帮助。在选择使用哪一个框架时,需要根据项目的具体需求和团队的技术栈来决定。
461 83
|
6月前
|
JavaScript 前端开发 编译器
Vue与TypeScript:如何实现更强大的前端开发
Vue.js 以其简洁的语法和灵活的架构在前端开发中广受欢迎,而 TypeScript 作为一种静态类型语言,为 JavaScript 提供了强大的类型系统和编译时检查。将 Vue.js 与 TypeScript 结合使用,不仅可以提升代码的可维护性和可扩展性,还能减少运行时错误,提高开发效率。本文将介绍如何在 Vue.js 项目中使用 TypeScript,并通过一些代码示例展示其强大功能。
284 22
|
8月前
|
人工智能 JavaScript 前端开发
Vue 性能革命:揭秘前端优化的终极技巧;Vue优化技巧,解决Vue项目卡顿问题
Vue在处理少量数据和有限dom的情况下技术已经非常成熟了,但现在随着AI时代的到来,海量数据场景会越来越多,Vue优化技巧也是必备技能。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
JavaScript 前端开发 搜索推荐
Vue的数据驱动视图与其他前端框架的数据驱动方式有何不同?
总的来说,Vue 的数据驱动视图在诸多方面展现出独特的优势,其与其他前端框架的数据驱动方式的不同之处主要体现在绑定方式、性能表现、触发机制、组件化结合、灵活性、语法表达以及与后端数据交互等方面。这些差异使得 Vue 在前端开发领域具有独特的地位和价值。
261 58
|
10月前
|
JavaScript 前端开发 jenkins
抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目
本文探讨了在不依赖Node和VSCode的情况下,仅使用记事本和浏览器开发一个完整的Vue3前端项目的方法。通过CDN引入Vue、Vue Router、Element-UI等库,直接编写HTML文件实现页面功能,展示了前端开发的本质是生成HTML。虽然日常开发离不开现代工具,但掌握这种基础方法有助于快速实现想法或应对特殊环境限制。文章还介绍了如何用Node简单部署HTML文件到服务器,提供了一种高效、轻量的开发思路。
248 10
|
10月前
|
前端开发 JavaScript Java
前端解决axios请求的跨域问题【2步完成】
本文介绍如何通过前端配置解决跨域问题,主要针对Vue项目中的`vite.config.js`文件进行修改。作者在联调过程中遇到跨域报错
556 1
|
前端开发 JavaScript 开发者
React与Vue:前端框架的巅峰对决与选择策略
【10月更文挑战第23天】React与Vue:前端框架的巅峰对决与选择策略
|
前端开发 JavaScript 数据管理
React与Vue:两大前端框架的较量与选择策略
【10月更文挑战第23天】React与Vue:两大前端框架的较量与选择策略

热门文章

最新文章