开发公司基础Axios封装与使用(基本流程步骤)

目录


一、axios是什么?

        axios是基于promise开发公司封装的请求库,开发公司它可作用于浏览器和NODE,开发公司相较于普通的ajax请求,开发公司它自身新加了拦截器、开发公司为请求添加附加条件等新特性。

二、axios开发公司的使用及封装(基于)

一、

npm install axios

二、开发公司搭建一个目录结构(开发公司考虑区分开发和生产环境)

        说明:.env.dev 和 .env.prod 开发公司是在由开发环境切换到开发公司生产环境打包或启动时使用。开发公司因为在封装axios时,开发公司你进需要通过node开发公司中的环境变量process.env即可取到当前加载的配置文件,通过配置来判断不同的阶段。下面解释一下两个文件如何放?以及如何配置使用?【.env.dev  .end.prod】

  1. //在使用vue-cli构建的项目中,在根目录下【与vue.config.js同级】新建 .env.dev 和 .env.prod 文件
  2. //该文件格式必须使用 = 的键值对
  3. //NODE_ENV为固定键 值为当前处于开发环境
  4. NODE_ENV = "development"
  5. //BASE_URL为固定键 值为当前的基础请求地址【该值也可在axios封装时写】
  6. BASE_URL = "http://123.com.cn"
  7. //以上两个键为配置文件中可直接使用的键,但是要在配置文件中使用其他键,则必须添加前缀 VUE_APP_
  8. //【VUE中】所有解析出来的环境变量都可以在 public/index.html 中以 【HTML 插值】中的方式使用。
  9. /*
  10. <%= value %> 直接插值
  11. <%- value%> 可以转换成html标签的
  12. <link href="<%= BASE_URL %>favicon.ico">
  13. */

该配置可在切换生产和开发环境时通过指令一键切换。通过执行不同的 npm run dev等启动服务【package.json】

  1. "scripts": {
  2. "serve": "vue-cli-service serve",
  3. "dev": "vue-cli-service serve --mode dev",
  4. "prod": "vue-cli-service serve --mode prod",
  5. "build": "vue-cli-service build",
  6. "lint": "vue-cli-service lint"
  7. }

三、axios的基础封装

        提前考虑:1.要区分是开发环境或生产环境  2.超时问题  3.代理问题   4.基础地址问题    5.拦截器需要做什么   6.权限添加验证cookie 或 tooken。【http.js】

  1. import axios from "axios";
  2. //不同环境下的地址
  3. let baseURL = "";
  4. //node中的环境变量process.env,也就是我们新增开发、生产的配置文件
  5. if(process.env.NODE_ENV === "development"){
  6. baseURL = "http://localhost:8080" //这里可在vue.config.js做一个代理【代理代码见下】
  7. }else{
  8. baseURL = "123.com.cn"
  9. }
  10. //创建axios实例
  11. const request = axios.create({
  12. timeout: 5000,
  13. baseURL:baseURL
  14. });
  15. //所有请求设置了授权头信息【请求头中设置cookie信息,一直携带,判权】
  16. axios.defaults.headers.common['Authorization'] = `${cookie}`;
  17. //这里是设置发送json格式参数
  18. axios.defaults.headers.post['Content-Type'] = 'application/json';
  19. //请求拦截器
  20. request.interceptors.request.use(
  21. //发送之前想要做些什么
  22. config => {
  23. // token是否过期,是否重新登陆等等
  24. // 此处可修改一些基本数据
  25. // config[baseURL,[data,[headers,[method,[timeout,[url] 等
  26. // 基础地址,请求参数,头部, 请求方式, 超时, 请求地址 等
  27. // config.headers.Cookie = "110110110110110110";
  28. return config;
  29. },
  30. //方法返回一个带有拒绝原因的 Promise 对象。
  31. error => Promise.reject(error)
  32. );
  33. /**************移除拦截器****************/
  34. // 动态移除
  35. // const me = axios.interceptors.request.use(function () {/*...*/});
  36. // axios.interceptors.request.eject(me);
  37. /***************************************/
  38. //响应拦截器(对请求结束后进行一些操作,,例如:统一收集报错)
  39. request.interceptors.response.use(
  40. //请求成功
  41. res => res.status === 200 ? Promise.resolve(res) : Promise.reject(res),
  42. //请求失败
  43. error => {
  44. //可根据不同的状态去区分不同的错误,达到不同效果
  45. if(error.response.status){
  46. error.response.status === 404 ? alert("请求不存在!!") : alert("其他");
  47. }
  48. return Promise.reject(error);
  49. }
  50. );
  51. export default request

在vue.config.js配置文件中对我们的请求做一个代理。

  1. const { defineConfig } = require('@vue/cli-service')
  2. module.exports = defineConfig({
  3. transpileDependencies: true,
  4. lintOnSave:false,//关闭语法检查
  5. //方式一
  6. /*
  7. devServer:{//代理
  8. proxy:'http://localhost:3000'
  9. }
  10. */
  11. //方式二
  12. devServer:{
  13. proxy:{
  14. "/":{
  15. target:"https:localhost:3000",//代理到的服务器地址
  16. ws:false,//是否对websocket启动代理
  17. changeOrigin:true,//用于控制请求头中的值
  18. }
  19. }
  20. }
  21. })

四、另种封装 — 简单封装

        在项目中,如果请求数量少,请求简单,限制条件较少,则可使用一种简单的方法进行封装调用。

  1. import axios from "axios";
  2. //封装对应的get请求
  3. const get = (url, params) => {
  4. return new Promise((resolve, reject) => {
  5. axios.get(url, {params})
  6. .then(res => resolve(res))
  7. .catch(err => reject(err));
  8. });
  9. }
  10. //封装对应的post请求
  11. const post = (url, param) => {
  12. return new Promise((resolve, reject) => {
  13. axios.post(url, param)
  14. .then(res => resolve(res))
  15. .catch(err => reject(err));
  16. });
  17. }

五、后 业务请求 的封装使用

        建立一个专门存放业务请求的文件夹api【这里根据业务需求:有的会存在两个文件夹,接口文件和接口业务执行文件】,api文件中放各个业务js的文件,并且设置统一的导出文件index.js即可

业务1.js

  1. //封装的请求
  2. import axios from '../http'
  3. //参数序列化方法 <最后的结果也就是&a=1&b=2>
  4. import qs from 'qs'
  5. export default {
  6. //登录
  7. loginIn(params){
  8. return axios.post('/loginIN',qs.stringify(params));
  9. },
  10. //退出
  11. loginOut(params){
  12. return axios.post('/loginIN',params);
  13. },
  14. //注册
  15. loginUp(params){
  16. return axios.get('/loginIN',{params});
  17. }
  18. }

业务2.js

  1. import axios from '../http'
  2. import qs from 'qs'
  3. export default {
  4. //更新列表
  5. refreshList(params){
  6. return axios.post('/refreshList',qs.stringify(params));
  7. },
  8. //更新提示
  9. refreshTips(params){
  10. return axios.post('/loginIN',params);
  11. }
  12. }

业务3.js

  1. import axios from '../http'
  2. export default {
  3. poetryPost(params){
  4. return axios.post('/all.json',params);
  5. },
  6. poetryGet(){
  7. return axios.get('/all.json');
  8. }
  9. }

index.js

  1. import loginAPI from './业务1'
  2. import refreshData from './业务2'
  3. import initPoetry from './业务3'
  4. export {
  5. loginAPI,
  6. refreshData,
  7. initPoetry
  8. }

六、在页面代码中使用封装的业务请求app.vue

        原先将axios放在vue的实例身上,这样就可以直接用this;但是v3的this没有了,所以现在也不推荐这样做了。应该避免每次都使用axios.create创建实例,实例过多既会占据内存也会影响效率。

  1. <template>
  2. <div>
  3. <h1>诗句:{{content}}</h1>
  4. <h2>诗句:{{content2}}</h2>
  5. </div>
  6. </template>
  7. <script>
  8. //使用不区分V2、V3
  9. import { initPoetry } from './axiosRequest/api/index'
  10. export default {
  11. data(){
  12. return {
  13. content:"",
  14. content2:""
  15. }
  16. },
  17. mounted(){
  18. initPoetry.poetryPost({a:1}).then(
  19. res => this.content = res.data.content,
  20. err => console.log(err)
  21. ).catch(
  22. err => console.log(err)
  23. );
  24. initPoetry.poetryGet().then(
  25. res => this.content2 = res.data.content,
  26. err => console.log(err)
  27. ).catch(
  28. err => console.log(err)
  29. );
  30. }
  31. }
  32. </script>

三、可扩展

        至此一个基于vue-cli搭建项目的基础axios封装就完成了,在此基础上可将封装进行扩展,使得更丰富与健壮。

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发