1、axios请求下载和引入
1.1、下载指令
可以直接用下面指令或者也可以查看axios中文文档:axios中文文档|axios中文网 | axios (axios-js.com)
npm install axios
可以简写成 :npm i axios
1.2、axios的引入方式
import axios from "axios"
2、请求封装(最简单封装)
2.1axios二次封装
api封装一
import axios from 'axios'
const instance = axios.create({
baseURL: "请求地址",
timeout: 1000, //请求时间、1000是一秒
});
instance.interceptors.request.use(config => {
const token =localStorage.getItem('token') // 替换为你的 Token
if (token) {
config.headers.Authorization =token
}
return config;
});
// 添加请求拦截器
instance.interceptors.request.use(function (config) {
// 在发送请求之前做些什么
return config;
}, function (error) {
// 对请求错误做些什么
return Promise.reject(error);
});
// 添加响应拦截器
instance.interceptors.response.use(function (response) {
// 对响应数据做点什么
return response.data;
}, function (error) {
// 对响应错误做点什么
return Promise.reject(error);
});
export default instance
api封装二
import http from "api封装一的路径"
export const log1 =()=>http.get("请求地址")
export const log2 =(params)=>http.post("请求地址",params)
export const log3 =(id)=>http.delete(`请求地址/${id}`,id)
页面用法
import {log1,log2,log3,log4,log5} from "api封装二的路径"
用法
不带参数
log1().then((res) => {
console.log(res);
})
带参数
log2({id:1}).then((res) => {
console.log(res);
})
log3(1).then((res) => {
console.log(res);
})
2.2axios二次封装,ts封装方式、ts的class封装
api封装一
import axios from "axios"
const config = {
baseURL:"请求地址",
timeout: 1000, //请求时间、1000是一秒
}
class Request{
instance:any;
constructor(configInfo:any){
this.instance = axios.create(configInfo);
this.instance.interceptors.request.use((config:any)=>{
let token = localStorage.getItem("token");
if(token){
config.headers.Authorization = token
}
return config
})
this.instance.interceptors.response.use((res:any)=>{
return res.data
})
}
get(url:string,params={}){
return this.instance.get(url,{params})
}
post(url:string,data:any){
return this.instance.post(url,data)
}
put(url:string,data:any){
return this.instance.put(url,data)
}
delete(url:string,data:any){
return this.instance.delete(url,data)
}
}
export default new Request(config);
api封装二
import http from "api封装一";
export const log1 = () => http.get("请求地址");
interface Iuser {
id: number;
name: string
}
export const log2 = (params:Iuser) => http.post("请求地址", params);
export const log3 = (id:number,name:string) => http.put(`请求地址/${id}`,{name:name});
export const log4 = (id:number) => http.delete(`请求地址/${id}`,id);
页面用法
import {log1,log2,log3,log4} from "api封装二的路径"
用法
不带参数
log1().then((res) => {
console.log(res);
})
带参数
post写法一
log2({id:1,name:"name的参数").then((res) => {
console.log(res);
})
post写法二
let params={
id:1,
name:"name的参数"
}
log2(params).then((res) => {
console.log(res);
})
log3(1,name的参数).then((res) => {
console.log(res);
})
log4(1).then((res) => {
console.log(res);
})
3、axios常见的请求方式
3.1、get请求,一般多用于获取数据(一般都是不带参数的)
方法一、
import axios from 'axios'; //引入axios请求
//不带参数
axios.get('请求地址').then(res => {
console.log(res);
})
//带参数,params是携带的参数
//方法一
axios.get('请求地址',{params:{id:1}}).then(res => {
console.log(res);
})
//方法二
axios.get('请求地址',{id:1}).then(res => {
console.log(res);
})
方法二、
二次封装的写法,login只是一个名字这个可以自定义的
不带参数
export const login= (params) => http.get("请求地址");
带参数
方法一、
export const login = (params) => http.get("请求地址", params);
方法二、
export const login = (params) => http.get("请求地址", {id:1});
ts版
interface log {
id: number;
}
export const login = (params:log) => http.get("请求地址", params);
3.2、post请求,主要提交表单数据和上传文件(一般都是携带参数的)
方法一、
import axios from 'axios'; //引入axios请求
//不带参数
axios.post('请求地址').then(res => {
console.log(res);
})
//带参数,params是携带的参数
//方法一
axios.post('请求地址',{params:{id:1}}).then(res => {
console.log(res);
})
//方法二
axios.post('请求地址',{id:1}).then(res => {
console.log(res);
})
方法二、
二次封装的写法,login只是一个名字这个可以自定义的
不带参数
export const login= (params) => http.post("请求地址");
带参数
方法一、
export const login = (params) => http.post("请求地址", params);
方法二、
export const login = (params) => http.post("请求地址", {id:1});
ts版
interface log {
id: number;
}
export const login = (params:log) => http.get("请求地址", params);
3.3、put请求,对数据全部进行更新(该请求和post类似,只是请求方法不同)
方法一、
import axios from 'axios'; //引入axios请求
//不带参数
axios.put('请求地址').then(res => {
console.log(res);
})
//带参数,params是携带的参数
//方法一
axios.put('请求地址',{params:{id:1}}).then(res => {
console.log(res);
})
//方法二
axios.put('请求地址',{id:1}).then(res => {
console.log(res);
})
方法二、
二次封装的写法,login只是一个名字这个可以自定义的
不带参数
export const login= (params) => http.put("请求地址");
带参数
方法一、
export const login = (params) => http.put("请求地址", params);
方法二、
export const login = (params) => http.put("请求地址", {id:1});
ts版
export const login= (id:number,name:string) => http.put(`请求地址/${id}`,{name:name});
3.4、patch请求,只对更改过的数据进行更新(该请求和post类似,只是请求方法不同)
方法一、
import axios from 'axios'; //引入axios请求
//不带参数
axios.get('请求地址').then(res => {
console.log(res);
})
//带参数,params是携带的参数
//方法一
axios.get('请求地址',{params:{id:1}}).then(res => {
console.log(res);
})
//方法二
axios.get('请求地址',{id:1}).then(res => {
console.log(res);
})
方法二、
二次封装的写法,login只是一个名字这个可以自定义的
不带参数
export const login= (params) => http.patch("请求地址");
带参数
方法一、
export const login = (params) => http.patch("请求地址", params);
方法二、
export const login = (params) => http.patch("请求地址", {id:1});
ts版
interface log {
id: number;
}
export const login = (params:log) => http.patch("请求地址", params);
3.5、delete请求,删除请求(参数可以放在url上也可以和post一样放在请求体中)
方法一、
import axios from 'axios'; //引入axios请求
//不带参数
axios.delete('请求地址').then(res => {
console.log(res);
})
//带参数,id是携带的参数
//方法一
axios.delete('请求地址',{params:{id:1}}).then(res => {
console.log(res);
})
//方法二
axios.delete('请求地址',{id:1}).then(res => {
console.log(res);
})
//方法三
axios.delete(`请求地址/?id=`+id).then(res => {
console.log(res);
})
方法二、
二次封装的写法,login只是一个名字这个可以自定义的
不带参数
export const login= () => http.delete("请求地址/id");
带参数
方法一、
export const login = (id) => http.delete("请求地址/id",id);
方法二、
export const login = (id) => http.delete("请求地址/?id="+id);
方法三,绑定到接口上、
export const login = (id) => http.delete(`请求地址/${id}`,id);
ts版
export const login = (id:number) => http.delete(`请求地址/${id}`,id);
4、常用的几种URL参数的拼接方法
1、单个参数
let id=1
url:"路径/?id="+id
url:`路径/${id}`
2、多个参数要用到这个“ `` ”和&这个隔开,不能穿汉字
let id=1
let name="canshu"
url:`路径/?id=${id}&name=${name}` //多个参数用&隔开
3、全动态拼接
不带参数的
let ipaddr = "192.162.1";
let path = "/user/index";
let url = "http://" + ipaddr +path ;
console.log(url);// http://192.168.1/user/index"
带参数的
let ipaddr = "192.162.1.1.....";
let path = "/arrg/box";
let getTimestamps = new Date().getTime();
let url = "http://" + ipaddr + path + "?timestamps=" + getTimestamps;
console.log(url);
使用问号和与号拼接参数:
var loadsrc = $(this).attr('href');
var companyId = $(this).attr('companyId');
var companyName = $(this).text();
window.location.href = loadsrc + '?companyid=' + companyId + '&companyName=' + companyName;