首页 > 其他分享 >vue3 + ts + vite 封装 request

vue3 + ts + vite 封装 request

时间:2023-04-28 17:12:17浏览次数:38  
标签:case axios return request ts break message vite

npm i axios

目录

 

request.ts  (直接复制可用)

import axios from "axios";
import { showMessage } from "./status"; // 引入状态码文件
import { ElMessage } from "element-plus"; // 引入el 提示框,这个项目里用什么组件库这里引什么

// 设置接口超时时间
axios.defaults.timeout = 60000;
axios.defaults.baseURL = "/api" || "";  // 自定义接口地址

const token = () => {
  if (sessionStorage.getItem("token")) {
    return sessionStorage.getItem("token");
  } else {
    return sessionStorage.getItem("token");
  }
};

//请求拦截
axios.interceptors.request.use(
  (config) => {
    // 配置请求头
    config.headers["Content-Type"] = "application/json;charset=UTF-8";
    config.headers["token"] = token();
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截
axios.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    const { response } = error;
    if (response) {
      // 请求已发出,但是不在2xx的范围
      showMessage(response.status); // 传入响应码,匹配响应码对应信息
      return Promise.reject(response.data);
    } else {
      ElMessage.warning("网络连接异常,请稍后再试!");
    }
  }
);

// 封装 请求并导出
export function request(data: any) {
  return new Promise((resolve, reject) => {
    const promise = axios(data);
    //处理返回
    promise
      .then((res: any) => {
        resolve(res.data);
      })
      .catch((err: any) => {
        reject(err.data);
      });
  });
}

status.ts (直接复制可用)

export const showMessage = (status: number | string): string => {
  let message: string = "";
  switch (status) {
    case 400:
      message = "请求错误(400)";
      break;
    case 401:
      message = "未授权,请重新登录(401)";
      break;
    case 403:
      message = "拒绝访问(403)";
      break;
    case 404:
      message = "请求出错(404)";
      break;
    case 408:
      message = "请求超时(408)";
      break;
    case 500:
      message = "服务器错误(500)";
      break;
    case 501:
      message = "服务未实现(501)";
      break;
    case 502:
      message = "网络错误(502)";
      break;
    case 503:
      message = "服务不可用(503)";
      break;
    case 504:
      message = "网络超时(504)";
      break;
    case 505:
      message = "HTTP版本不受支持(505)";
      break;
    default:
      message = `连接出错(${status})!`;
  }
  return `${message},请检查网络或联系管理员!`;
};

 

不要忘了配置代理

在  vite.config.ts 里

export default defineConfig({
  server: {
    host: "192.168.0.0",
    port: 8080,
    https: false,
    // 跨域的写法
    proxy: {
      "/api": {
        target: "http://192.168.2.12:8080", // 实际请求地址
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, ""),
      },
    },
  },
});

 

如何应用

 

import { request } from "../utils/request";

export function login(data: any) {
  return request({
    url: "/login",
    method: "post",
    data,
  });
}
  export function list(params: any) {     return request({       url: "/list",       method: "get",       params,     });   }

 

 

const submitForm = () => {
      login({username: "", password: ""}).then((res: any) => {
        console.log(res, "请求成功")
      })
}

 

标签:case,axios,return,request,ts,break,message,vite
From: https://www.cnblogs.com/wqddmg/p/17362652.html

相关文章

  • XMLHttpRequest发请求的步骤
    /*具体来说,AJAX包括以下几个步骤。以下是AJAX发请求的步骤1.创建XMLHttpRequest实例2.发出HTTP请求3.接收服务器传回的数据4.更新网页数据*///实例化一个对象xhrvarxhr=newXMLHttpRequest(),method="GET",url="https://www.baidu......
  • 【解决】axios 下载文件 Failed to read the 'responseText' property from 'XMLHttp
    主要解决以下两个问题问题一:idm一些网站不允许请求同一文件两次故障原因:IDM在发神经因为它检测到浏览器集成插件未安装,所以诱导你安装。实际上,装了插件问题也会出现。改参数都没用。1.很可能是你点击网页的下载链接有问题(换个网页下载试试,就不提示了),Edge浏览器一直会欺......
  • CMakeLists---自定义变量-add_definitions()函数
    转载:https://blog.csdn.net/qq_35699473/article/details/115837708引言其实这个函数在安装一些库的时候,它的CMakeLists里面就有这样的函数。典型的就是opencv了。opencv安装时候有一些指令也是针对这个函数的,比如安装命令(随便搜索的):cmake ../opencv-3.4.1-DWITH_GTK_2......
  • echarts饼图实现圆环图例修改
    实现效果:代码:constoption={//环形图中间文字title:{text:'1200',subtext:'总户数',textStyle:{fontSize:16,color:'#333',fontWeight:600,},subtextStyle:{fontSize:12,c......
  • python 检查rtsp流是否可用
    importcv2fromfunc_timeoutimportfunc_set_timeout,exceptionsdefcheck_rtsp_stream(url):@func_set_timeout(2)defparse_rtsp_stream(rtsp_address):try:cap=cv2.VideoCapture(rtsp_address)cap.set(cv2.CAP_PRO......
  • 【git基础问题】LFS upload missing objects
    前言 修改文件权限;还是不行;修改文件权限之后,使用gitpush就可以了;gitpush-uorigintda4dev#好像ok了gitlfspush--allorigintda4dev#notok   参考1. 完......
  • vite不能选配方案?vite-creater强势来袭!
    我正在参加「掘金·启航计划」项目背景vite出现之后,迅速带走了一大波webpack的使用者,即使是对打包工具不熟悉的小白,也能很快感受到两者的区别——vite快的多!vite官方文档第一句也是讲述其名字的由来Vite(法语意为"快速的"),其logo也与其名字一样,处处都透露着一个字,那就是快......
  • 【TypeScript】document.body.style TS 报错 Cannot assign to 'style' because it is
    报错信息解决方法style对象提供了一个cssText属性,支持设置多种CSS样式:document.body.style.cssText=`width:${targetX}px;height:${targetY}px;transform:scale(${scaleRatio})translateX(-50%);left:50%`;还有其他方法也可以,参考下面的文章参考文章七爪源码:使用......
  • ts文件可以操控vue文件里面的ref元素吗
    ts文件可以操控vue文件里面的ref元素吗exportconstfileInputElement=ref<null|HTMLElement>(null);我在ts文件里获得fileInputElement我能操控vue文件里ref为fileInputElement的元素吗import{messagesRef,}from"@/core/helpers/chat";exportconstmessagesRef......
  • Python3+WebSockets实现WebSocket通信
    一、说明1.1背景说明前段时间同事说云平台通信使用了个websocket的东西,今天抽空来看一下具体是怎么个通信过程。从形式上看,websocket是一个应用层协议,socket是数据链路层、网络层、传输层的抽像;从应用场合上看,websocket可以使用javascript实现,而socket不能用javascript实现(真......