当前位置:首页 » 《休闲阅读》 » 正文

vue中axios的二次封装——vue 封装axios详细步骤

7 人参与  2024年04月04日 18:51  分类 : 《休闲阅读》  评论

点击全文阅读


一、为什么要封装axios

    api统一管理,不管接口有多少,所有的接口都可以非常清晰,容易维护。

    通常我们的项目会越做越大,页面也会越来越多,如果页面非常的少,直接用axios也没有什么大的影响,那页面组件多了起来,上百个接口呢,这个时候后端改了接口,多加了一个参数什么的呢?那就只有找到那个页面,进去修改,整个过程很繁琐,不易于项目的维护和迭代。

    这个时候如果我们统一的区管理接口,需要修改某一个接口的时候直接在api里修改对应的请求,是不是很方便呢?因为我们用的最多的还是get post请求,我们就可以针对封装。

二、怎么封装 axios

1. 拿到项目和后端接口,首先要配置全局代理;
2. 接着全局封装axios和request.js;
3. 过滤axios请求方式,控制路径,参数的格式,http.js;
4. 正式封装api.js;
5. 页面调用;

 三、具体步骤

(一)vue项目的前期配置

   1. 终端输入

npm i axios -S

   2. 在项目中 main.js 文件中输入

import axios from "axios";

(二)配置config文件中的代理地址 

    修改项目中config目录下的 index.js文件。【也可能是vue.config.js 文件】

'use strict'// Template version: 1.3.1// see http://vuejs-templates.github.io/webpack for documentation.const path = require('path')module.exports = {  dev: {    // Paths    assetsSubDirectory: 'static',    assetsPublicPath: '/',    proxyTable: {      '/': {        target: 'http://localhost:8080',        changeOrigin: true,        pathRewrite: {          '^/': ''        }      },      '/ws/*': {        target: 'ws://127.0.0.1:8080',        ws: true      }    },    // Various Dev Server settings    host: 'localhost', // can be overwritten by process.env.HOST    port: 8082, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined    autoOpenBrowser: false,    errorOverlay: true,    notifyOnErrors: true,    poll: false, // https://webpack.js.org/configuration/dev-server/#devserver-watchoptions-    // Use Eslint Loader?    // If true, your code will be linted during bundling and    // linting errors and warnings will be shown in the console.    useEslint: true,    // If true, eslint errors and warnings will also be shown in the error overlay    // in the browser.    showEslintErrorsInOverlay: false,    /**     * Source Maps     */    // https://webpack.js.org/configuration/devtool/#development    devtool: 'cheap-module-eval-source-map',    // If you have problems debugging vue-files in devtools,    // set this to false - it *may* help    // https://vue-loader.vuejs.org/en/options.html#cachebusting    cacheBusting: true,    cssSourceMap: true  },  build: {    // Template for index.html    index: path.resolve(__dirname, '../dist/index.html'),    // Paths    assetsRoot: path.resolve(__dirname, '../dist'),    assetsSubDirectory: 'static',    assetsPublicPath: '/',    /**     * Source Maps     */    productionSourceMap: true,    // https://webpack.js.org/configuration/devtool/#production    devtool: '#source-map',    // Gzip off by default as many popular static hosts such as    // Surge or Netlify already gzip all static assets for you.    // Before setting to `true`, make sure to:    // npm install --save-dev compression-webpack-plugin    productionGzip: false,    productionGzipExtensions: ['js', 'css'],    // Run the build command with an extra argument to    // View the bundle analyzer report after build finishes:    // `npm run build --report`    // Set to `true` or `false` to always turn it on or off    bundleAnalyzerReport: process.env.npm_config_report  }}

 (三)封装axios实例 —— request.js

/****   request.js   ****/// 导入axiosimport axios from 'axios'// 使用element-ui Message做消息提醒import { Message} from 'element-ui';//1. 创建新的axios实例,const service = axios.create({  // 公共接口--这里注意后面会讲  baseURL: process.env.BASE_API,  // 超时时间 单位是ms,这里设置了3s的超时时间  timeout: 3 * 1000})// 2.请求拦截器service.interceptors.request.use(config => {  //发请求前做的一些处理,数据转化,配置请求头,设置token,设置loading等,根据需求去添加  config.data = JSON.stringify(config.data); //数据转化,也可以使用qs转换  config.headers = {    'Content-Type':'application/json' //配置请求头  }  //如有需要:注意使用token的时候需要引入cookie方法或者用本地localStorage等方法,推荐js-cookie  //const token = getCookie('名称');//这里取token之前,你肯定需要先拿到token,存一下  //if(token){  //config.params = {'token':token} //如果要求携带在参数中  //config.headers.token= token; //如果要求携带在请求头中  //}  return config}, error => {  Promise.reject(error)})// 3.响应拦截器service.interceptors.response.use(response => {  //接收到响应数据并成功后的一些共有的处理,关闭loading等  return response}, error => {  /***** 接收到异常响应的处理开始 *****/  if (error && error.response) {    // 1.公共错误处理    // 2.根据响应码具体处理    switch (error.response.status) {      case 400:        error.message = '错误请求'        break;      case 401:        error.message = '未授权,请重新登录'        break;      case 403:        error.message = '拒绝访问'        break;      case 404:        error.message = '请求错误,未找到该资源'        window.location.href = "/NotFound"        break;      case 405:        error.message = '请求方法未允许'        break;      case 408:        error.message = '请求超时'        break;      case 500:        error.message = '服务器端出错'        break;      case 501:        error.message = '网络未实现'        break;      case 502:        error.message = '网络错误'        break;      case 503:        error.message = '服务不可用'        break;      case 504:        error.message = '网络超时'        break;      case 505:        error.message = 'http版本不支持该请求'        break;      default:        error.message = `连接错误${error.response.status}`    }  } else {    // 超时处理    if (JSON.stringify(error).includes('timeout')) {      Message.error('服务器响应超时,请刷新当前页')    }    error.message = '连接服务器失败'  }  Message.error(error.message)  /***** 处理结束 *****/  //如果不需要错误处理,以上的处理过程都可省略  return Promise.resolve(error.response)})//4.导入文件export default service

四、封装请求——http.js 

/****   http.js   ****/// 导入封装好的axios实例import request from './request'const http ={  /**   * methods: 请求   * @param url 请求地址   * @param params 请求参数   */  get(url,params){    const config = {      method: 'get',      url:url    }    if(params) config.params = params    return request(config)  },  post(url,params){    const config = {      method: 'post',      url:url    }    if(params) config.data = params    return request(config)  },  put(url,params){    const config = {      method: 'put',      url:url    }    if(params) config.params = params    return request(config)  },  delete(url,params){    const config = {      method: 'delete',      url:url    }    if(params) config.params = params    return request(config)  }}//导出export default http

五、正式封装API,用于发送请求——api.js 

import request from "@/utils/request.js";import qs from "qs";const baseUrl = '/api/jwt/auth'//登录export function authCodeLogin(params) {  return request({    url: baseUrl + "/authCodeLogin/" + params.code,    method: "get",  });}//退出export function authLogout(params) {  return request({    url: baseUrl + "/logout",    method: "get",  });}//获取用户数据export function getUserInfo(params) {  return request({    url: baseUrl + "/getUserInfo",    method: "get",    params:qs.stringfy(params)  });}//其实,也不一定就是params,也可以是 query 还有 data 的呀!//params是添加到url的请求字符串中的,用于get请求。会将参数加到 url后面。所以,传递的都是字符串。无法传递参数中含有json格式的数据//而data是添加到请求体(body)中的, 用于post请求。添加到请求体(body)中,json 格式也是可以的。

 六、如何在vue文件中调用

    用到哪个api 就调用哪个接口

import { authCodeLogin  } from '@/api/api.js'   getModellogin(code){      let params = {        code: code,      }      authCodeLogin(params).then(res=>{        if (res.code === 200) {          localStorage.clear()          // 菜单          this.$store.dispatch('saveMenu', [])          // this.getFloorMenu()          // this.getmenu()          this.$router.push('/')        }else{          console.log('error');        }      })    },

   其实还挺简单的!~

   记录一下,方便遗忘的时候拿起来用。


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/90590.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 进错房,嫁给八零最牛特种兵已完结(林晚夏江肆年)抖音热文_《进错房,嫁给八零最牛特种兵已完结》最新章节免费在线阅读 -
  • 重生后选魔族,天族哭着求我当王全章节(月沁雪任意)全文免费阅读无弹窗大结局_(重生后选魔族,天族哭着求我当王全章节)重生后选魔族,天族哭着求我当王全章节免费阅读全文最新章节列表_笔趣阁(重生后选魔族,天族哭着求我当王全章节) -
  • 捡回摄政王后,她在皇室作威作福完结版小说(景飞鸢赵灵杰)全文免费阅读无弹窗大结局_(捡回摄政王后,她在皇室作威作福完结版免费阅读全文大结局)最新章节列表_笔趣阁(捡回摄政王后,她在皇室作威作福完结版) -
  • 千金难泣(立轩苏子骞翠竹吴进)全本免费在线阅读_千金难泣最新章节在线阅读(立轩苏子骞翠竹吴进)
  • 《沈云阶傅宴辞》(沈云阶傅宴辞》已完结完整版全集大结局小说)全文阅读笔趣阁
  • 《沈凌峰沈国华》已完结小说全文阅读笔趣阁《沈凌峰沈国华》
  • 《傅嫤韩恬魏郯程茂》已完结(傅嫤韩恬魏郯程茂)热门小说全目录完整版)全文阅读笔趣阁
  • 八零俏军医错嫁糙汉军官:番外+全文+后续(贺昭朗孟翩然)完本小说免费_全本免费小说八零俏军医错嫁糙汉军官:番外+全文+后续最新小说全文阅读(贺昭朗孟翩然)
  • 失去千千万万遍在线阅读(阮相宜陆凛言)全文免费阅读无弹窗大结局_(失去千千万万遍在线阅读)失去千千万万遍在线阅读免费阅读全文最新章节列表_笔趣阁(失去千千万万遍在线阅读) -
  • 脱离世界后,妻子疯了火爆小说小说(沈夕颜林程言)全文免费阅读无弹窗大结局_(脱离世界后,妻子疯了火爆小说免费阅读全文大结局)最新章节列表_笔趣阁(脱离世界后,妻子疯了火爆小说) -
  • 跨年发生踩踏,男友为救白月光丢下我(温林初宝宝)免费阅读 -
  • 都重生了,还不离婚等啥呢宋招弟霍文铮小说在线章节免费阅读

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1