欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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ì)象是通過(guò)"{}"或"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ù)失敗、暫無(wú)數(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、頁(yè)面中調(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簡(jiǎn)易封裝教程

首先在根目錄下新建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ì)象,并將所有的訪問(wèn)均存放在這個(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組件定義,全局、局部組件,配合模板及動(dòng)態(tài)組件功能示例

    vue組件定義,全局、局部組件,配合模板及動(dòng)態(tài)組件功能示例

    這篇文章主要介紹了vue組件定義,全局、局部組件,配合模板及動(dòng)態(tài)組件功能,結(jié)合實(shí)例形式分析了vue.js中組件的定義、全局組件、局部組件、配合模板組件及動(dòng)態(tài)組件的相關(guān)使用方法與操作注意事項(xiàng),需要的朋友可以參考下
    2019-03-03
  • Vue CLI 命令行打包配置自定義參數(shù)方式

    Vue CLI 命令行打包配置自定義參數(shù)方式

    這篇文章主要介紹了Vue CLI 命令行打包配置自定義參數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue中el-select 和el-tree二次封裝實(shí)現(xiàn)

    vue中el-select 和el-tree二次封裝實(shí)現(xiàn)

    本文介紹了vue中el-select 和el-tree二次封裝實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • Vuex 使用 v-model 配合 state的方法

    Vuex 使用 v-model 配合 state的方法

    這篇文章主要介紹了Vuex 使用 v-model 配合 state的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-11-11
  • vue后臺(tái)項(xiàng)目如何使用router.addRoutes動(dòng)態(tài)加入路由的思路

    vue后臺(tái)項(xiàng)目如何使用router.addRoutes動(dòng)態(tài)加入路由的思路

    這篇文章主要介紹了vue后臺(tái)項(xiàng)目如何使用router.addRoutes動(dòng)態(tài)加入路由的思路,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • vue實(shí)現(xiàn)路由懶加載的3種方法示例

    vue實(shí)現(xiàn)路由懶加載的3種方法示例

    這篇文章主要給大家介紹了關(guān)于vue實(shí)現(xiàn)路由懶加載的3種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • vue中element 上傳功能的實(shí)現(xiàn)思路

    vue中element 上傳功能的實(shí)現(xiàn)思路

    這篇文章主要介紹了vue中element 的上傳功能的實(shí)現(xiàn)思路,本文大概通過(guò)兩種實(shí)現(xiàn)思路,具體內(nèi)容詳情大家跟隨腳本之家小編一起看看吧
    2018-07-07
  • vue 解決移動(dòng)端彈出鍵盤導(dǎo)致頁(yè)面fixed布局錯(cuò)亂的問(wèn)題

    vue 解決移動(dòng)端彈出鍵盤導(dǎo)致頁(yè)面fixed布局錯(cuò)亂的問(wèn)題

    今天小編就為大家分享一篇vue 解決移動(dòng)端彈出鍵盤導(dǎo)致頁(yè)面fixed布局錯(cuò)亂的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • vue2利用html2canvas+jspdf動(dòng)態(tài)生成多頁(yè)P(yáng)DF方式

    vue2利用html2canvas+jspdf動(dòng)態(tài)生成多頁(yè)P(yáng)DF方式

    利用vue2結(jié)合html2canvas和jspdf,可以實(shí)現(xiàn)前端頁(yè)面內(nèi)容導(dǎo)出為PDF的功能,首先需要安裝相關(guān)依賴,使用html2canvas將指定div內(nèi)容捕捉為圖像,再通過(guò)jspdf將圖像轉(zhuǎn)換為PDF
    2024-09-09
  • vue3中WatchEffect高級(jí)偵聽器的實(shí)現(xiàn)

    vue3中WatchEffect高級(jí)偵聽器的實(shí)現(xiàn)

    本文主要介紹了vue3中WatchEffect高級(jí)偵聽器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01

最新評(píng)論