当前位置:首页 » 《随便一记》 » 正文

Vue3【Axios封装、Axios跨域配置 、创建服务器提供数据 】(九)-全面详解(学习总结---从入门到深化)

19 人参与  2023年04月03日 13:17  分类 : 《随便一记》  评论

点击全文阅读


?作者简介:大家好,我是小童,Java开发工程师,CSDN博客博主,Java领域新星创作者
?系列专栏:前端、Java、Java中间件大全、微信小程序、微信支付、若依框架、Spring全家桶
?如果文章知识点有错误的地方,请指正!和大家一起学习,一起进步?
?如果感觉博主的文章还不错的话,请?三连支持?一下博主哦
?博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人 

目录

Axios封装

Axios跨域配置 

创建服务器提供数据 


Axios封装

封装 axios 之后,在使用上会更优雅,我们知道面向对象编程 (OOP)遵循,低耦合高内聚。我们把网络请求放在一起更利于后期维护 

import axios from "axios"import qs from "querystring"/** * 处理错误信息 * status:状态吗 * info:具体信息 */const errorHandle = (status,info) =>{    switch(status){        case 400:            console.log("语义错误");            break;        case 401:            console.log("服务器认证失败");            break;        case 403:            console.log("服务器请求拒绝执行");            break;        case 404:            console.log("请检查网路请求地址");         break;        case 500:            console.log("服务器发生意外");            break;        case 502:            console.log("服务器无响应");            break;        default:            console.log(info);            break;   }}/** * 创建Axios对象 */const instance = axios.create({    baseURL:"http://iwenwiki.com",    timeout:5000})/** * 拦截器 */instance.interceptors.request.use(    config =>{        if(config.method === 'post'){            config.data = qs.stringify(config.data)       }        return config   },    error => Promise.reject(error))instance.interceptors.response.use(    response => response.status === 200 ? Promise.resolve(response) : Promise.reject(response),    error =>{        const { response } = error;        if(response){           errorHandle(response.status,response.info)       }else{            console.log("网络请求被中断了");       }   })export default instance
import axios from "../utils/request"const baseUrl = {  banner:"/api/blueberrypai/getIndexBanner.php"}const api = {    getBanner(){        return axios.get(baseUrl.banner)   }}export default api
<template>    <h3>网络请求</h3>    <ul>      <li v-for="item in fingerUnion.data" :key="item">            <h3>{{ item.title }}</h3>            <p>{{ item.content }}</p>        </li>    </ul></template><script setup>  import { onMounted,reactive } from "vue"  import api from "../../api"  const fingerUnion = reactive({      data:{}})onMounted(() =>{    api.getBanner().then(res =>{        fingerUnion.data = res.data.banner   })})</script>

实时效果反馈

1.下列代码,画横线处应该填写的代码是:

import axios from "axios"import qs from "querystring"/** * 处理错误信息 * status:状态吗 * info:具体信息 */const errorHandle = (status,info) =>{   switch(status){        case 400:            console.log("语义错误");            break;        case 401:            console.log("服务器认证失败");            break;        case 403:            console.log("服务器请求拒绝执行");            break;        case 404:            console.log("请检查网路请求地址");            break;        case 500:            console.log("服务器发生意外");            break;        case 502:            console.log("服务器无响应");            break;        default:            console.log(info);            break;   }}/** * 创建Axios对象 */const instance = axios.create({    baseURL:"http://iwenwiki.com",    timeout:5000})/*** 拦截器 */instance.___.request.use(    config =>{        if(config.method === 'post'){            config.data = qs.stringify(config.data)       }        return config   },    error => Promise.reject(error))instance.___.response.use(    response => response.status === 200 ? Promise.resolve(response) : Promise.reject(response),    error =>{        const { response } = error;        if(response){           errorHandle(response.status,response.info)       }else{            console.log("网络请求被中断了");       }   })export default instance

A axios

B response

C instance

D interceptors

Axios跨域配置 

在工作的真实场景中,跨域是常见问题,所以我们需要解决跨域问题 

import { fileURLToPath, URL } from 'node:url'import { defineConfig } from 'vite'import vue from '@vitejs/plugin-vue'// https://vitejs.dev/config/export default defineConfig({  plugins: [vue()],   resolve: {    alias: {      '@': fileURLToPath(new URL('./src', import.meta.url))   } },  server: {    proxy: {      '^/api': {        target: 'http://iwenwiki.com', // 后端服务实际地址        changeOrigin: true, //开启代理        rewrite: (path) => path.replace(/^\/api/, '')     }   } }})
<template>    <h3>网络请求</h3>    <ul>        <li v-for="item in list.info" :key="item.id">            <p>{{ item.title }}</p>        </li>    </ul></template><script setup>  import { onMounted,reactive } from "vue"  import axios from "axios"  const list = reactive({     info:[]})onMounted(() =>{   axios.get("/api/api/FingerUnion/list.php")   .then(res =>{        list.info = res.data.data   })   .catch(error =>{        console.log(error);   })})</script>

实时效果反馈

1.下列代码,画横线处应该填写的代码是:

import { fileURLToPath, URL } from 'node:url'import { defineConfig } from 'vite'import vue from '@vitejs/plugin-vue'// https://vitejs.dev/config/export default defineConfig({  plugins: [vue()],  resolve: {    alias: {      '@': fileURLToPath(new URL('./src', import.meta.url))   } },  server: {    proxy: {      '^/api': {        ___: 'http://iwenwiki.com', // 后端服务实际地址        changeOrigin: true, //开启代理        rewrite: (path) => path.replace(/^\/api/, '')     }   } }})

A axios

B target

C instance

D interceptors

创建服务器提供数据 

在真实开发场景中,很多项目是前后端同时开发,那么前端就不会第一时间拿到接口数据,但是为了前端开发期间的测试,我们还是 需要自己创建服务器的 

const express = require("express");const app = express();const router = require("./router");const bodyParser = require("body-parser");app.use(bodyParser.urlencoded({    extended:true}))app.use("/api",router);app.listen(3000,() =>{    console.log("server running at port 3000");})
const express = require("express");const router = express.Router();const url = require("url");const list = require("./data/list")router.get("/list",(req,res) =>{    const page = url.parse(req.url,true).query.page;    res.send({        status:200,        result:list,        page   })})router.post("/login",(req,res) =>{    const username = req.body.username;    const password = req.body.password;    res.send({        status:200,        username,        password   })})module.exports = router;
module.exports = [   {        id:1001,        name:"衣服"   },   {        id:1002,        name:"鞋子"  },   {        id:1003,        name:"电脑"   }]

点击全文阅读


本文链接:http://zhangshiyu.com/post/58195.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1