1.安装基于 promise 的网络请求库axios
npm install axios
2.axios封装与使用
2.1 request.js对axios的封装
import axios from 'axios';
import {baseInfo} from "../common/config";
import {getToken,removeToken,removeUsername,removeUserId} from "../common/storage";
let baseURL = baseInfo.baseURL;
let baseURLStorage = baseInfo.baseURLStorage;
export {baseURL,baseURLStorage};
export function requestAdmin(config){
let Token = getToken();
if(Token){
config.headers={
...config.headers,
'Token' : `${Token}`,
'Authorization' : `token`,
}
}
//使用axios创建公共的配置信息,不需要重复创建
const instance = axios.create({
baseURL:baseInfo.baseAdminUrl,
headers:{...config.headers},
timeout:100000
});
// axios请求拦截器 请求
instance.interceptors.request.use(config=>{return config;},err=>{console.log(err);})
// axios响应拦截器 数据返回
instance.interceptors.response.use(res=>{
let {code,message} = res.data;
//判断用户登录的token是否过期
if(code === 1002){
res.message = 'token过期,请重新登录';
res.code = 1002;
setTimeout(_ =>{
removeToken();
removeUsername();
removeUserId();
},1000);
}
if(message === "Expired token"){
res.message = 'token过期,请重新登录';
res.code = 1002;
setTimeout(_ =>{
removeToken();
removeUsername();
removeUserId();
},1000);
}
return res;
},err=>{
console.log(err);
})
return instance(config);
}
2.2 network/v1/login/index.tsx对axios封装的使用
index.tsx
//引用axios封装函数
import {requestAdmin} from "@/network/request";
/**
* 请求登录
* @param data
*/
export function requestLogin(data:any){
return requestAdmin({
url:"/login/login",
data,
method:"post"
})
}
2.3 views/v1/login/index.tsx页面视图中的调用
index.tsx
//引入network的网络请求接口
import { requestLogin } from "@/network/v1/login/index"
interface InitProps{}
const Login:FC<InitProps> = (props:InitProps)=>{
const onFinish = (values: any) => {
let data = new URLSearchParams();
data.append('username', "测试数据");
data.append('password', "测试数据");
requestLogin(data).then((res: resInterface) => {
let { code, data,message } = res.data;
if (code === 200) {
showSuccess('登录成功');
setToken(data.token);
setUserId(data.id);
setTimeout(_ =>{
setLoading(false)
},1000)
} else {
showError(`${message}`);
setLoading(false)
}
}).catch((err:any) => {
console.log(err);
})
};
return (
<React.Fragment>
<Button onClick={onFinish}>登 录</Button>
</React.Fragment>
)
}
export default Login;
个人网站:沉默博客
如有错误,请多多指教。
如对你有帮助,给个赞吧。