Vue3-知识结构-前后端分离

Vue3知识结构之前后端分离



一、Promise 对象

是一种异步解决方案
用promise对象来接管异步过程,并且还需要接管受该异步过程影响的逻辑

1. 基本语法

const promiseResult=new Promise(function (resolve){
  resolve();
}).then((data)=>{console.log(data);return data2;
}).then((data2)=>{console.log(data2);
}).catch((err) => console.log(err.message))

2. Promise函数封装

示例

const promiseResult1=promiseFunDemo().then((data)=>{console.log(data);});
function promiseFunDemo(){
  if(numFlag===1){
      const promiseResult=new Promise(function (resolve) {
       setTimeout(()=>{
       console.log(2);
       resolve('resolve')
       },4000)});
      return promiseResult;
  }else if(numFlag==2){
    return Promise.resolve('转换成promise对象');
  }else{
    return Promise.resolve(100);
  }
}

二、Axios

是一个基于promise的HTTP库,可以用在浏览器和node.js中。主要的作用是用于向后台发起请求
1.通过Axios去请求后端接口
2.后端接口响应请求,提供数据
3.前端获取到数据

1.基础使用

在main.js中声明全局属性

import HelperAxios from 'axios'
AppNew.config.globalProperties.$HelperAxios = HelperAxios

通过axios进行 get / delete 请求
在get / delete请求中,params里面的请求参数会被配置在URL中

//具体使用
const promiseReq=proxy.$HelperAxios.get('http://localhost:5013/demo',{params:{id:1,name:'zhangsan'}})
 promiseReq.then((reResult)=>{
   console.log(reResult);
 })

通过axios进行 post / put 请求
在post / put 请求中,请求参数不需要params,被配置在body中

const promiseReq=proxy.$HelperAxios.post('http://localhost:5013/demo',{id:1,name:'zhangsan'})
 promiseReq.then((reResult)=>{
   console.log(reResult);
 })

RESTful风格:
查询: get请求 / 新建: post请求
删除: delete请求 / 修改: put请求

2.二次封装

axios本身是XHR的封装,对axios的封装可以理解为二次封装

1).新建js文件
2).创建axios实例并进行初始化
3).预设网络异常代码;预设接口异常代码
4).封装请求响应函数
5).export导出

封装实例

import axios from "axios";

//创建一个axios实例 初始化
const axiosInstance = axios.create({
    baseURL: 'http://localhost:5678',
    // timeout: 5000,
    headers: { 'X-Custom-Header': 'foobar', 'Authorization': 'kbPpDmex2xNn6eN47AJTp2FEncQHcaWp' }
})

//预设网络异常代码
const jsonHttpcode = {
    A100: 'Continue 继续',
    A101: 'Switching Protocols 切换协议',
    A400: 'Bad Request 客户端请求的语法错误',
    A401: 'Unauthorized 请求要求用户的身份认证',
    A403: 'Forbidden ',
    A404: 'Not Found',
    //...
}
//预设接口异常代码
const jsonApiCode = {
    Fail: 'This is fail',
    Error: 'This is error'
    //....
}
//函数封装
function reqFuncAxios(methodIn, urlIn, reqDataIn, FuncflowIn) {
    let reqAttribute = {
        url: urlIn,
        method: methodIn
    }
    switch (methodIn) {
        case 'put':
        case 'post':
            reqAttribute.data = reqDataIn;
            break;
        case 'delete':
        case 'get':
            reqAttribute.params = reqDataIn;
            break;
    }
    const promiseReq = axiosInstance(reqAttribute);  //调用axios实例请求后端接口
    promiseReq.then((reResult) => {
        if (reResult.status === 200) {
            if (reResult.data.StatusCode === "Success") {
                FuncflowIn(reResult.data)
            }
            else {
                alert(jsonApiCode[reResult.data.StatusCode])
            }
        }
        else {
            alert(jsonHttpcode['A' + reResult.status])
        }
    })
}
export default reqFuncAxios

具体使用

proxy.$reqFuncAxios('get','/Training/demo',{id:1,name:'Lisi'}, (jsonReqResult)=>{
      console.log(jsonReqResult);
  })
proxy.$reqFuncAxios('post','/Training/demo',{id:2,name:'zhsa'}, (jsonReqResult)=>{
      console.log(jsonReqResult);
  })

3.拦截器

在main.js中封装,可以和axios二次封装完成一样的逻辑

请求拦截器

Axios.interceptors.request.use((config)=>{
return config
},(error)=>{return Promise.reject(error)})

响应拦截器

Axios.interceptors.response.use((response)=>{
return response
},(error)=>{return Promise.reject(error)})

三、跨域&请求代理

通过代理解决接口的跨域问题

网址的三要素:协议名+主机名(域名)+端口
//任意一个与当前页面url不同即为跨域
(http 默认端口号 80,https 默认端口号 443)

在vite.config.js添加
server:
port:5633 
proxy:{
  '/api':{
   target: 'axios的请求根路径',
   secure:false,            //协议为https时改为true
   changeOrigin:true,      //是否跨域
   rewrite:(path)=>path.replace(/^\/api/,"")
}}

代理配置后,将请求的接口网址写成配置的端口并加上’/api’,浏览器在请求时会把/api之前的根路径替换成 ‘target’ 里的内容。

const promiseReq=proxy.$HelperAxios.get('http://localhost:5633/api/demo',{params:{id:1,name:'zhangsan'}})
 promiseReq.then((reResult)=>{
   console.log(reResult);
 })
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值