最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3實(shí)戰(zhàn)-axios請(qǐng)求封裝問題(get、post、put、delete)

 更新時(shí)間:2023年03月19日 15:27:09   作者:月影星云  
這篇文章主要介紹了vue3實(shí)戰(zhàn)-axios請(qǐng)求封裝問題(get、post、put、delete),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

vue3實(shí)戰(zhàn)axios請(qǐng)求封裝問題

1、在src目錄下創(chuàng)建http文件夾,在http文件夾下分別創(chuàng)建index.js、request.js、api.js

2、index.js的作用:用于導(dǎo)出api.js定義的所有接口,代碼如下

export * from './api';

3、request.js代碼如下:

import axios from 'axios';
import buildURL from 'axios/lib/helpers/buildURL';
import { merge } from 'axios/lib/utils';

//判斷指定參數(shù)是否是一個(gè)純粹的對(duì)象,所謂"純粹的對(duì)象",就是該對(duì)象是通過"{}"或"new Object"創(chuàng)建的
function isPlainObject (val) {
? ?? ?return val && val.constructor.name === 'Object'
}

//請(qǐng)求之前進(jìn)行攔截,可做的操作:1、添加loading的加載;2、添加請(qǐng)求頭;3、判斷表單提交還是json提交
let requestInterceptors = [
?? ?config => {
?? ??? ?//添加loading的加載
?? ??? ?
?? ??? ?//添加請(qǐng)求頭
?? ??? ?config.headers.authorization = sessionStorage.getItem('Token');
?? ??? ?//判斷表單提交還是json提交
?? ??? ?if (config.emulateJSON && isPlainObject(config.data)) {
?? ??? ??? ?config.data = buildURL('', config.data).substr(1);
?? ??? ?}
?? ??? ?return config;
?? ?}
]

//請(qǐng)求響應(yīng)之后進(jìn)行攔截,可做操作:1、取消loading的加載;2、對(duì)返回狀態(tài)進(jìn)行判斷:如請(qǐng)求錯(cuò)誤、請(qǐng)求超時(shí)、獲取數(shù)據(jù)失敗、暫無數(shù)據(jù)等等
let responseInterceptors = [
?? ?res => {
?? ??? ?//取消loading加載
?? ??? ?
?? ??? ?//對(duì)返回狀態(tài)進(jìn)行判斷:如請(qǐng)求錯(cuò)誤、請(qǐng)求超時(shí)、獲取數(shù)據(jù)失敗等等

?? ??? ?//返回結(jié)果
?? ??? ?return Promise.resolve(res);
?? ?},
?? ?err => {
?? ??? ?//取消loading加載
?? ??? ?
?? ??? ?//對(duì)返回狀態(tài)進(jìn)行判斷:如請(qǐng)求錯(cuò)誤、請(qǐng)求超時(shí)、獲取數(shù)據(jù)失敗等等

?? ??? ?//返回結(jié)果
?? ??? ?return Promise.reject(err);
?? ?}
]

//組裝請(qǐng)求
let serviceCreate = config => {
?? ?let service = axios.create(merge({}, config));
?? ?service.interceptors.request.use(...requestInterceptors);
?? ?service.interceptors.response.use(...responseInterceptors);
?? ?return service
}
serviceCreate();
export { serviceCreate, merge };

4、api.js代碼如下:

import { serviceCreate, merge } from '@/http/request';

//這種方式可以采用單個(gè)項(xiàng)目的接口,也可以使用多個(gè)項(xiàng)目的接口,看自己的項(xiàng)目情況而定
let http0 = serviceCreate({
? ? baseURL: '/project1/api1',
? ? timeout: 15000,//請(qǐng)求超時(shí)
? ? emulateJSON: true,//默認(rèn)表單提交
})
let http1 = serviceCreate({
? ? baseURL: '/project2/api2',
? ? timeout: 15000,//請(qǐng)求超時(shí)
? ? emulateJSON: true,//默認(rèn)表單提交
})

//get請(qǐng)求示例
export function getData(params, config) {
? ? return http0.get('/project/list', merge(config, { params }));
}
//delete請(qǐng)求示例
export function deleteData(params, config) {
? ? return http0.delete('/project/list', merge(config,{ params }));
}
//post請(qǐng)求示例(表單提交)
export function postDataFrom(params, config) {
? ? return http0.post('/project/list', params, config);
}
//post請(qǐng)求示例(json提交)
export function postDataJson(params, config) {
? ? return http0.post('/project/list', params, merge(config, { emulateJSON: false }));
}
//put請(qǐng)求示例(表單提交)
export function putDataFrom(params, config) {
? ? return http0.put('/project/list', params, config);
}
//put請(qǐng)求示例(json提交)
export function putDataJson(params, config) {
? ? return http0.put('/project/list', params, merge(config, { emulateJSON: false }));
}

5、頁面中調(diào)用 

import { getData, deleteData, postDataFrom, postDataJson, putDataFrom, putDataJson } from "@/http";

getData({ name: "我是參數(shù)" }).then(res => { console.log("返回?cái)?shù)據(jù)", res) })
deleteData({ name: "我是參數(shù)" }).then(res => { console.log("返回?cái)?shù)據(jù)", res) })
postDataFrom({ name: "我是參數(shù)" }).then(res => { console.log("返回?cái)?shù)據(jù)", res) })
postDataJson({ name: "我是參數(shù)" }).then(res => { console.log("返回?cái)?shù)據(jù)", res) })
putDataFrom({ name: "我是參數(shù)" }).then(res => { console.log("返回?cái)?shù)據(jù)", res) })
putDataJson ({ name: "我是參數(shù)" }).then(res => { console.log("返回?cái)?shù)據(jù)", res) })

vue3 axios簡易封裝教程

首先在根目錄下新建utils文件夾,并在下面新建兩個(gè)文件,requests.js和html.js

requests.js用于引入axios并設(shè)置根域名以及一些默認(rèn)設(shè)置、攔截器等。

import axios from "axios";

const service = axios.create({
    baseURL: 'http://localhost:3000',
    timeout: 10000,
})

// 請(qǐng)求攔截器
service.interceptors.request.use(config=>{
    return config
},err=>{
    return Promise.reject(err)  //返回錯(cuò)誤
})
    
// 響應(yīng)攔截器
service.interceptors.response.use(res=>{
    return res
},err=>{
    return Promise.reject(err)  //返回錯(cuò)誤
})


export default service

寫完之后將創(chuàng)建的實(shí)例對(duì)象暴露出去,在html.js中進(jìn)行引入

html.js文件的作用是調(diào)用requests的實(shí)例對(duì)象,并將所有的訪問均存放在這個(gè)文件中(api),使用的時(shí)候按需引入即可。

import request from "./requests";
export const GetPosts = () => request.get('posts/1')
export const GetsearchData = (params) => request.get('/list',{params})
export const PostPosts = (params) => request.post('posts',params)

引入的文件:

<template>
    <el-button type="primary" @click="clickGet">點(diǎn)我發(fā)送get請(qǐng)求</el-button>
    <el-button type="primary" @click="clickPost">點(diǎn)我發(fā)送post請(qǐng)求</el-button>
    <el-button type="primary" @click="clickPut">點(diǎn)我發(fā)送put請(qǐng)求</el-button>
    <el-button type="primary" @click="clickDel">點(diǎn)我發(fā)送delete請(qǐng)求</el-button>
</template>

<script>
import { GetPosts, PostPosts } from "../../utils/html"

export default {
    setup(){
        function clickGet(){
            GetPosts().then(res => {
                console.log(res)
            })
            // axios({
            //     method: 'GET',
            //     url: 'http://localhost:3000/posts'
            // }).then(res => {
            //     console.log(res)
            // })
        }
        function clickPost(){
            PostPosts({
                title: '我超級(jí)喜歡打游戲',
                author: '賬本兒erer',
                age: '24'
            }).then(res => {
                console.log(res)
            })
        }
        function clickPut(){
            
        }
        function clickDel(){
            
        }
        return {
            clickDel,
            clickGet,
            clickPost,
            clickPut
        }
    }
}
</script>

<style>

</style>

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue手寫橫向輪播圖的實(shí)例

    Vue手寫橫向輪播圖的實(shí)例

    這篇文章主要介紹了Vue手寫橫向輪播圖的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue實(shí)現(xiàn)PopupWindow組件詳解

    Vue實(shí)現(xiàn)PopupWindow組件詳解

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)PopupWindow組件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • vue使用this.$message不生效的部分原因及解決方案

    vue使用this.$message不生效的部分原因及解決方案

    這篇文章主要介紹了vue使用this.$message不生效的部分原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Vite配置代理Proxy解決跨域問題小結(jié)

    Vite配置代理Proxy解決跨域問題小結(jié)

    我們?cè)谧鲰?xiàng)目的時(shí)候經(jīng)常會(huì)遇到跨域的問題,下面這篇文章主要給大家介紹了關(guān)于Vite配置代理Proxy解決跨域問題的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • Vue項(xiàng)目中v-bind動(dòng)態(tài)綁定src路徑不成功問題及解決

    Vue項(xiàng)目中v-bind動(dòng)態(tài)綁定src路徑不成功問題及解決

    這篇文章主要介紹了Vue項(xiàng)目中v-bind動(dòng)態(tài)綁定src路徑不成功問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue項(xiàng)目中如何安裝element組件

    Vue項(xiàng)目中如何安裝element組件

    這篇文章主要介紹了Vue項(xiàng)目中如何安裝element組件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Vue-router 報(bào)錯(cuò)NavigationDuplicated的解決方法

    Vue-router 報(bào)錯(cuò)NavigationDuplicated的解決方法

    這篇文章主要介紹了Vue-router 報(bào)錯(cuò)NavigationDuplicated的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Vue過濾器的用法和自定義過濾器使用

    Vue過濾器的用法和自定義過濾器使用

    本篇文章主要介紹了Vue過濾器的用法和自定義過濾器,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • Vue事件總線怎么用

    Vue事件總線怎么用

    這篇文章主要介紹了Vue事件總線的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • vuecli3.0腳手架搭建及不同的打包環(huán)境配置vue.config.js的詳細(xì)過程

    vuecli3.0腳手架搭建及不同的打包環(huán)境配置vue.config.js的詳細(xì)過程

    這篇文章主要介紹了vuecli3.0腳手架搭建及不同的打包環(huán)境配置vue.config.js的詳細(xì)過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01

最新評(píng)論

阿拉善右旗| 洛川县| 滕州市| 江华| 舞阳县| 松阳县| 泽州县| 宜君县| 运城市| 项城市| 宜良县| 青冈县| 鄂托克前旗| 察哈| 德清县| 泰安市| 保康县| 洱源县| 临沧市| 太仆寺旗| 视频| 廊坊市| 永年县| 文水县| 介休市| 巴青县| 库尔勒市| 丹寨县| 六安市| 五常市| 革吉县| 平乐县| 本溪市| 扶沟县| 呼图壁县| 达州市| 维西| 兰溪市| 岳普湖县| 邵武市| 山丹县|