请求封装(axios、fetch)

在前端发送请求到后台不同的框架与原生js发送请求的方式都不相同,比如我们在使用jquery时发送请求可以用jq中封装好的$.ajax,利用原生js向node发送请求时可以使用原生的ajax(我们也可以手动进行封装),在vue框架或react中可以使用axios或feach向后台发送请求,下面将对axios、feach进行简单封装。

一、axios

1、axios安装命令

复制代码
npm install axios

2、封装好的axios

复制代码
import axios from "axios";//下载并引入axios

const myAxios=axios.create({
    baseURL:'您的请求路径',
    timeout: 5000,//响应超时时间设置
    headers:{//设置请求头并携带token
        'Content-Type':'application/json',
        'token':sessionStorage.getItem('token')
    }
})
//请求拦截器
axios.interceptors.request.use(function (config){
    console.log(config)
    return config;
},function (error){
    return Promise.reject(error)
})

//响应拦截
axios.interceptors.response.use((response)=>{
    console.log(response)
    return response;//响应成功
},function (error){//响应失败
    switch (error.response.status){
        case 401://token有问题
            sessionStorage.clear()
            alert("重新登录");
            window.location.href="/"
            window.location.href="/login"
            break;
        case 400:
            break;
    }
})

export default myAxios //导出封装好的axios

3、其他页面应用

复制代码
//post请求方式
axios.post('请求路径',{
          //您要发送给后台的数据
        username:'admin',
        pwd:'admin'
      }).then(rep=>{//请求成功返回的数据
        console.log(rep)
      })

二、fetch

1、安装命令

复制代码
npm install whatwg-fetch -save

2、对fetch进行封装

复制代码
import 'whatwg-fetch'//引入

//设置代理后的请求路径
const BASE_URL="/api";//基础请求路径,

//如果是get请求,需要将get请求的参数拼接成字符串 

const json2url=(json)=>{
    let arr=[];
    for(let name in json){
        arr.push(name+"="+json[name])
    }
    return arr.join("&")
}

const http=({url,method="get",params={},data={}})=>{

    if(!url)return;

    const token=sessionStorage.getItem("token") || "";//获取token(一般登录后存进去)

    let options={
        method,
        headers:{
            token
        },

    }

    //判断请求方式,默认使用get方式
    if(method=="post"){
        options.body=JSON.stringify(data)
    }

    //返回拼接好的路径
    return fetch(BASE_URL+url+"?"+json2url(params),options).then(response=>response.json())

}
export default http;//导出

3、其他页面使用

复制代码
import http from '../../utils/http'//引入封装好的fetch
//登录请求
        http({
            url:"请求路径",
            params:values//请求参数
        }).then(res=>{//请求成功返回
            console.log(res);
        })
相关推荐
崔庆才丨静觅14 分钟前
比官方便宜一半以上!Midjourney API 申请及使用
前端
Moment17 分钟前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
崔庆才丨静觅32 分钟前
刷屏全网的“nano-banana”API接入指南!0.1元/张量产高清创意图,开发者必藏
前端
剪刀石头布啊34 分钟前
jwt介绍
前端
爱敲代码的小鱼41 分钟前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax
Cobyte1 小时前
AI全栈实战:使用 Python+LangChain+Vue3 构建一个 LLM 聊天应用
前端·后端·aigc
NEXT061 小时前
前端算法:从 O(n²) 到 O(n),列表转树的极致优化
前端·数据结构·算法
剪刀石头布啊1 小时前
生成随机数,Math.random的使用
前端
剪刀石头布啊1 小时前
css外边距重叠问题
前端
剪刀石头布啊1 小时前
chrome单页签内存分配上限问题,怎么解决
前端