首页 > 其他分享 >Vue3 编写HTTP 请求工具并使用

Vue3 编写HTTP 请求工具并使用

时间:2024-10-18 15:52:27浏览次数:8  
标签:axios HTTP url 响应 params Vue3 编写 post response

编写Http请求

首先在vue项目中创建一个api工具包并新建http.js

导入axios

import axios from 'axios';

如果没有axios,那么要先下载一个

下载axios

配置axios默认设置

  • 设置了 Axios 的默认超时时间为 5 秒。
  • 允许跨域请求,通过设置 withCredentials 为 true
  • 设置了 POST 请求的默认 Content-Type 响应头为 'application/x-www-form-urlencoded;charset=UTF-8'
  • 设置了基础 URL 为 "http://localhost:8080",这意味着所有请求都会以这个 URL 作为前缀。
axios.defaults.timeout=5000; //超时时间5s
axios.defaults.withCredentials=true;//允许跨域
//Content-type响应头
axios.defaults.headers.post['Content-Type']='application/x-www-form-urlencoded;charset=UTF-8';
// 基础url
axios.defaults.baseURL="http://localhost:8080"

响应拦截器:

  • 定义了一个响应拦截器,它会在每个请求结束后执行。
  • 如果响应状态码为 200,拦截器会解析响应并返回给调用者。
  • 如果响应状态码不是 200,拦截器会拒绝响应并返回错误。
  • 对于错误响应,拦截器会根据状态码进行不同的处理:
    • 如果状态码为 401(未授权),它会重定向到登录页面,并带上当前页面的路径作为查询参数。
    • 如果状态码为 404(未找到),目前没有做任何处理,但你可以根据需要添加逻辑。
// 响应拦截器
axios.interceptors.response.use(
       response=>{
        //如果reponse里面的status是200,说明访问到接口了,否则错误
        if(response.status==200){
            return Promise.resolve(response);
        }else{
            return Promise.reject(response)
        }
       },
       error=>{
        if(error.response.status){
           switch(error.response.status){
            case 401:  //没有登录,返回登录页面
                router.replace({
                    path:'/',
                    query:{
                        redirect:router.currentRout.fullPath
                    }
                });
                break;
            case 404:  //没有找到
                  break;
           }
           return Promise.reject(error.response);
        }
       }
       
);

封装get和post方法:

  1. 封装 GET 方法

    • 定义了一个 get 函数,它接受 url 和 params 作为参数。
    • 使用 Axios 发送 GET 请求,并将查询参数附加到 URL 上。
    • 如果请求成功,它将解析响应数据并返回给调用者。
    • 如果请求失败,它将拒绝错误。
  2. 封装 POST 方法

    • 定义了一个 post 函数,它接受 url 和 data 作为参数。
    • 使用 Axios 发送 POST 请求,并将请求体数据发送到服务器。
    • 如果请求成功,它将解析响应数据并返回给调用者。
    • 如果请求失败,它将拒绝错误。
// 封装get方法

// Promise是 JavaScript 中用于处理异步操作的一种对象。它代表了一个异步操作的最终完成(或失败)及其结果值。
//执行器函数有两个参数,分别是用于表示异步操作成功的resolve函数和表示异步操作失败的reject函数。
//异步操作成功则执行resolve函数,失败则执行reject函数
export function get(url,params={}){
    return new Promise((resolve,reject)=> {

        axios.get(url,{params:params})
        .then(response=>{
            //成功的回调
            //response是一个名字,随便起,它代表了服务器响应的所有数据,包含响应头,响应体.response.data代表的是接口响应的核心数据
            resolve(response.data);
        })
        .catch(err=>{
            //失败的回调
            reject(err);
        })

    });
}


//封装post方法

export function post(url,data={}){
    return new Promise((resolve,reject)=> {

        axios.post(url,data)
        .then(response=>{
            //成功的回调
            //response是一个名字,随便起,它代表了服务器响应的所有数据,包含响应头,响应体.response.data代表的是接口响应的核心数据
            resolve(response.data);
        })
        .catch(err=>{
            //失败的回调
            reject(err);
        })

    });
}

将以上代码全部拼接放到http.js中即可

使用方法:

 以post方法为例

新建index.js文件作为服务接口

从http.js中导入get,post方法,并编方法体

import {get,post} from "./http"

//服务接口

//判断管理员是否登录成功
export const getLoginStatus=(params)=>post('自己后台定义的url:admin/login/status',params);

提交表单:

function submitForm(){
   //URLSearchParams是 JavaScript 中的一个内置构造函数,用于处理 URL 的查询字符串参数
  //比如说url = 'https://example.com?param1=value1&param2=value2';
  //param1=name=ruleForm.username
  let params=new URLSearchParams();
  params.append("name",ruleForm.username);
  params.append("password",ruleForm.password);
  getLoginStatus(params)
  .then((res)=>{
    if(res.code==1){
      notify("登录成功","success");
      router.push("/Info")
    }else{
      notify("登录失败","error");
    }
  })
}

标签:axios,HTTP,url,响应,params,Vue3,编写,post,response
From: https://blog.csdn.net/qq_53932517/article/details/142966866

相关文章

  • Vue3 - 详细实现移动端H5网页调用摄像头拍照功能,微信公众号网页h5页面打开本地摄像头
    前言PC网站端,请访问这篇文章。在vue3手机移动端开发中,详解H5页面/微信公众号网页调用浏览器摄像头并拍照完整示例,在手机浏览器上开启摄像头并拍照上传服务器或保存到本地功能(实时预览使用图片临时路径或base64数据),切换转换前置摄像头与后置摄像头,vue3手机H5打开摄像......
  • 根据json转idea 自带Http Client脚本
    importcom.fasterxml.jackson.databind.JsonNode;importcom.fasterxml.jackson.databind.ObjectMapper;publicclassApiDocConverter{publicstaticvoidmain(String[]args)throwsException{Stringjson="{\n"+&quo......
  • 一文说清楚http、tcp、socket、websocket区别
    写在开头阅读本文,需要您对tcp/ip协议簇协议有一定的了解,本文旨在带你了解Socket到底是啥,他与tcp/ip协议簇、WebSocket、Http等协议之间的关系OSI网络七层模型第一层:应用层,定义了用于在网络中进行通信和传输数据的接口;(Http协议位于该层)第二层:表示层,定义不同系统中数......
  • vue3.0 使用Element Plus修改el-table表格的横纵滚动条颜色、宽高等样式
    在Vue3.0和ElementPlus中修改el-table的滚动条样式,可能遇到了样式不生效的问题。这通常是因为ElementPlus使用了自定义的滚动条组件el-scrollbar,而不是浏览器默认的滚动条。因此,需要针对el-scrollbar组件进行样式定制。<stylescoped>/*滚动条整体部分*/......
  • 一年期https证书申请方法!
    HTTPS证书是一种数字证书,用于在客户端和服务器之间建立加密连接,确保数据传输的安全性。它的作用是验证网站身份,保护用户数据不被窃取或篡改。现在一年期的免费https证书比较少,但经过小编仔细寻找,我这边还是有所发现的,下面也详细给大家介绍一下申请的方法以及步骤免费HTTPS......
  • 基于 Python + Vue3!一个轻量级的域名和 SSL 证书监测平台!
    大家好,我是Java陈序员。在企业开发中,由于业务众多,涉及到很多业务域名证书,证书过期由于遗忘常常未能及时续期,导致线上访问异常,给企业带来损失!今天,给大家介绍一个轻量级的域名和SSL证书监测平台,用来解决证书管理困难的问题!关注微信公众号:【Java陈序员】,获取开源项目分享、AI......
  • 10/17 vue3
    主要学习了前端工程化安装了node。js会用vscode导入vite依赖,简单了解了各部分的作用学习了xue的一些语法插值表达式{{}}在里面可以放函数数据名和对象调用的api文本渲染命令比如v-textv-html可以识别文本的html代码都要写在开始标签里属性渲染v-bind:属性名=“数据......
  • https
    https对称加密:相同的秘钥tls协议对称加密:客户端访问wed服务器时首先发送给服务器一个hello请求其中包括客户端所支持的tls版本,支持的加密算法,然后服务器接受到这些信息后就会选择最优的tls版本和加密算法,并将这些信息反馈给客户端,然后客户端响应信息生成一段随机的字符串通......
  • vue3中的自定义hooks的使用,以及和mixin的区别
    1、理解hooks的概念:hook本质是一个函数,将setup函数中使用的CompositionAPI进行封装,类似于Vue2中的mixin2、mixin相比hook的缺点:(1)变量来源不明确(隐式传入),不利于阅读,使代码变得难以维护(2)同名属性、同名方法无法融合,可能会导致冲突3、例一:第一步:在src/hooks/index.js文件:imp......
  • 性能测试:流量回放工具-GoReplay!结合一款无需CA证书即可抓取HTTPS明文的工具,简直无敌
    性能测试:流量回放工具-GoReplay!结合一款无需CA证书即可抓取HTTPS明文的工具,简直无敌。GoReplay是一个开源网络监控工具,可以将实时HTTP流量捕获并重放到测试环境。应用成熟的过程中,测试所需的工作量往往会成倍增长。针对这个问题,GoReplay为使用者提供了重用现有通信量......