请求封装(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);
        })
相关推荐
徐同保21 分钟前
React useRef 完全指南:在异步回调中访问最新的 props/state引言
前端·javascript·react.js
fanruitian22 分钟前
uniapp 创建项目
javascript·vue.js·uni-app
刘一说1 小时前
Vue 导航守卫未生效问题解析:为什么路由守卫不执行或逻辑失效?
前端·javascript·vue.js
一周七喜h1 小时前
在Vue3和TypeScripts中使用pinia
前端·javascript·vue.js
weixin_395448912 小时前
main.c_cursor_0202
前端·网络·算法
摘星编程2 小时前
用React Native开发OpenHarmony应用:Calendar日期范围选择
javascript·react native·react.js
东东5162 小时前
基于vue的电商购物网站vue +ssm
java·前端·javascript·vue.js·毕业设计·毕设
MediaTea2 小时前
<span class=“js_title_inner“>Python:实例对象</span>
开发语言·前端·javascript·python·ecmascript
雨季6663 小时前
Flutter 三端应用实战:OpenHarmony “微光笔记”——在灵感消逝前,为思想点一盏灯
开发语言·javascript·flutter·ui·dart
编码者卢布3 小时前
【Azure Stream Analytic】用 JavaScript UDF 解决 JSON 字段被转成 Record 的关键点
javascript·json·azure