• Vue项目前期准备工作


    一.公共处理请求的响应内容

    一般情况下发送请求,后端都会传过来json数据,其中为公共返回类的样式返回内容,分为code状态码、message消息信息、data返回数据。

    假如每一次发送请求都去处理返回信息 太麻烦,我们创建一个拦截器对返回信息进行统一操作。

    其中的数据不做处理返回给前端做处理。

    1.首先我们创建utils目录下的api.js

    2.引入axios工具 和element-ui的返回消息组件

     3.拦截器的编写

    1. axios.interceptors.response.use(success=>{
    2. //业务逻辑错误 success不是后端接口返回的数据串 而是浏览器的
    3. //说明掉到接口了 http标准状态码200 但是逻辑是否200不确定
    4. if(success.status&&success.status===200){
    5. //掉到接口了但是逻辑不对 响应给页面后台传过来的message
    6. if(success.data.code!==200){
    7. Message.error({message:success.data.message})
    8. return;
    9. }
    10. //成功后返回给客户端成功的消息(后端的)
    11. if (success.data.message){
    12. Message.success({message:success.data.message})
    13. }
    14. //拦截器拦截到的请求都是成功的就将数据继续传递下去
    15. //事实上拦截器就帮助前端处理了后端传来的message
    16. return success.data;
    17. }
    18. },error => {
    19. //可能服务器崩了error不是后端接口返回的数据串 而error.response.data是浏览器的
    20. if(error.response.code!==200){
    21. Message.error({message:"接口被吃了"+error.response.data.message})
    22. router.replace("/").then(r => console.log(r))
    23. }
    24. });

    success.data 

     
    

     success.status  此为浏览器标准状态码

    Error

    error.code不存在

    error.status是错误的标准浏览器状态码

    error.response如下

     error.response.data是返回的公共类

    二.4种类型请求的封装和全局处理

    每一次去调用axios的异步请求都需要书写相同的格式,我们将四种请求封装好,进行全局配置,

    只需当插件调用 避免重复代码。

    1.同样是在api.js中

    2.编写代码如下。

    1. //万一添加前置路径 可变更
    2. let base = '';
    3. //封装请求
    4. export const postRequest=(url,parmes)=>{
    5. return axios({
    6. method:"post",
    7. url:`${base}${url}`,
    8. data: parmes
    9. })
    10. }
    11. // 传送json的put请求
    12. export const putRequest = (url, params) => {
    13. return axios({
    14. method: 'put',
    15. url: `${base}${url}`,
    16. data: params
    17. })
    18. }
    19. // 传送json的get请求
    20. export const getRequest = (url, params) => {
    21. return axios({
    22. method: 'get',
    23. url: `${base}${url}`,
    24. data: params
    25. })
    26. }
    27. // 传送json的delete请求
    28. export const deleteRequest = (url, params) => {
    29. return axios({
    30. method: 'delete',
    31. url: `${base}${url}`,
    32. data: params
    33. })
    34. }

    3.全局处理

    将组件导入到main.js中 

     代码如下

    1. import { postRequest, putRequest, getRequest, deleteRequest } from './utils/api'
    2. // 插件形式使用请求
    3. Vue.prototype.postRequest = postRequest
    4. Vue.prototype.putRequest = putRequest
    5. Vue.prototype.getRequest = getRequest
    6. Vue.prototype.deleteRequest = deleteRequest

    4.调用举例

    三.跨域代理的书写 

    1. const {defineConfig} = require('@vue/cli-service')
    2. module.exports = defineConfig({
    3. transpileDependencies: true,
    4. devServer: {
    5. proxy: {
    6. "/api": {
    7. target: 'http://www.lijiaqi.icu:8081', // 对应的代理地址
    8. //重写路径 替换规则
    9. pathRewrite: {
    10. '/api': ''
    11. }
    12. }
    13. }
    14. }
    15. })
  • 相关阅读:
    go基础学习笔记
    服务降级hystrix
    高企认定对研发费用的要求是什么?
    Vue核心 Vue生命周期
    Java单例模式
    [附源码]计算机毕业设计基于Springboot的物品交换平台
    1.3.2有理数减法(第一课时)作业设计
    MYSQL数据库底层基础专栏
    基于JAVA学生招生信息网计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    CSS常见用法 以及JS基础语法
  • 原文地址:https://blog.csdn.net/weixin_58473601/article/details/126208939