国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Vue3創(chuàng)建項(xiàng)目(四)axios封裝及接口配置

這篇具有很好參考價(jià)值的文章主要介紹了Vue3創(chuàng)建項(xiàng)目(四)axios封裝及接口配置。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

項(xiàng)目結(jié)構(gòu):?

創(chuàng)一個(gè)axios項(xiàng)目,Vue.js,前端,javascript,vue.js

目錄

???????index.ts

????????api.ts

看完需要預(yù)計(jì)花費(fèi)10分鐘。

請(qǐng)求攔截器與響應(yīng)攔截器?

閱讀下面代碼需先了解以下內(nèi)容:

? ?

????請(qǐng)求攔截器:

? ? 請(qǐng)求攔截器的作用是在請(qǐng)求發(fā)送前進(jìn)行一些操作,例如在每個(gè)請(qǐng)求體里加上token,每次請(qǐng)求攜帶token傳給后端,統(tǒng)一做處理。

? ? 響應(yīng)攔截器:

? ? 響應(yīng)攔截器的作用是在接收到響應(yīng)后進(jìn)行一些操作,例如在服務(wù)器返回登錄狀態(tài)token失效,需要重新登錄的時(shí)候,跳轉(zhuǎn)到登錄頁,對(duì)不同狀態(tài)碼做不同處理。

???????index.ts

創(chuàng)一個(gè)axios項(xiàng)目,Vue.js,前端,javascript,vue.js?

?先檢查package.json文件是否已安裝axios,沒安裝先安裝。。。

安裝命令如下:?

npm i axios -S
import axios from "axios";
//創(chuàng)建axios實(shí)例
const service = axios.create({
	baseURL: "https://www.xxxxxxx.site/mock/xxxxx/api",
	timeout: 5000,//超時(shí)時(shí)間
	headers: {//編譯語言
		"Content-type": "application/json;charset=utf-8"
	}
})
//請(qǐng)求攔截
//就是你請(qǐng)求接口的時(shí)候,我會(huì)先攔截下來,對(duì)你的數(shù)據(jù)做一個(gè)判斷,或者攜帶個(gè)token給你
service.interceptors.request.use((config) => {//請(qǐng)求的數(shù)據(jù)
	config.headers = config.headers || {}  // 沒有數(shù)據(jù)的話就設(shè)置為空設(shè)置為數(shù)據(jù)
	if (localStorage.getItem("token")) {//先確保登錄
		config.headers.token = localStorage.getItem("token") || ""
	}
	return config//必須返回出去,不然請(qǐng)求發(fā)不出去
}, error => {
	//處理錯(cuò)誤請(qǐng)求
	return Promise.reject(error)
})
//響應(yīng)攔截:后端返回來的結(jié)果
service.interceptors.response.use((res) => {
	const code: number = res.data.code//code是后端的狀態(tài)碼
	if (code !== 200) {
		//請(qǐng)求失敗(包括token失效,302,404...根據(jù)和后端約定好的狀態(tài)碼做出不同的處理)
		return Promise.reject(res)
	} else {
		//請(qǐng)求成功
		console.log(res, '成功----')
		return Promise.resolve(res.data)
	}
}, (err) => {
	console.log(err, '錯(cuò)誤信息的處理')//錯(cuò)誤信息的處理
	//處理錯(cuò)誤響應(yīng)
	return Promise.reject(err)
})
//因?yàn)閯e的地方要用,所以就把實(shí)例暴露出去,導(dǎo)出
export default service

????????api.ts

//我要用到的一些接口
import service from "@/request/index";
import {ILoginData} from "@/type/login";  //引入接口

// 登錄接口
export function login(data: ILoginData) {//接口ILoginData接口的變量名
    return service({
        url: "/login",
        method: "POST",
        data
    })
}

// 商品列表接口
export function getGoodsList(){
    return service({
        url: "/getGoodsList",
        method: "GET"
    })
}

// 用戶列表接口
export function getUserList(){
    return service({
        url: "/getUserList",
        method: "GET"
    })
}

// 角色列表接口
export function getRoleList(){
    return service({
        url: "/getRoleList",
        method: "GET"
    })
}

// 權(quán)限列表接口
export function getAuthorityList(){
    return service({
        url: "/getAuthorityList",
      method: "GET",
    })
}

?調(diào)用封裝好的axios方法,下面有個(gè)Login登錄調(diào)用接口示例:

	login(data.ruleForm).then((res) => {
	    console.log(res,'111')
		//使用 localStorage.setItem,將token保存到localStorage
		// res.data.token是后端返回的信息
		localStorage.setItem("token", res.data.token);
		// 并且跳轉(zhuǎn)到首頁
		router.push('/')
		}).catch((err)=>{
			console.log(err,'err')
		});

????????看完整示例:

<template>
	<div class="login-box">
		<div>
			<el-form ref="ruleFormRef" :model="ruleForm" status-icon :rules="rules" label-width="70px">
				<el-form-item style="width:400px" label="用戶名:" prop="username">
					<el-input v-model="ruleForm.username" type="text" autocomplete="off" />
				</el-form-item>
				<el-form-item style="width:400px" label="密碼:" prop="password">
					<el-input v-model="ruleForm.password" type="password" autocomplete="off" />
				</el-form-item>
				<el-form-item>
					<el-button class="login-btn" type="primary" @click="submitForm(ruleFormRef)">登錄</el-button>
					<el-button class="login-btn" @click="resetForm()">重置</el-button>
				</el-form-item>
			</el-form>
		</div>
	</div>
</template>
<script lang="ts">
	//ts中有一個(gè)類型推斷
	// ref有個(gè)value屬性,可以獲取值
	import {
		defineComponent,
		reactive,
		toRefs,
		ref
	} from 'vue'
	import {LoginData} from '../type/login'
	import type {FormInstance} from 'element-plus'
	import {login} from '../request/api'
	import {useRouter} from 'vue-router'

	export default defineComponent({
		setup() {
			const data = reactive(new LoginData()); //調(diào)用這個(gè)類,然后實(shí)例化對(duì)象
			const router = useRouter(); //  等于$router

			// 表單輸入規(guī)則
			const rules = {
				username: [{
						required: true, //是否必須字段
						message: "請(qǐng)輸入用戶名", // 觸發(fā)的提示信息
						trigger: "blur" // 觸發(fā)時(shí)機(jī): 當(dāng)失去焦點(diǎn)時(shí)(光標(biāo)不顯示的時(shí)候),觸發(fā)此提示
					},
					{
						min: 3, // 最小字符書
						max: 5, // 最大字符數(shù)
						message: "用戶名長(zhǎng)度需要在3-5個(gè)字符之間", // 觸發(fā)的提示信息
						trigger: "blur"
					}
				],
				password: [{
						required: true, //是否必須字段
						message: "請(qǐng)輸入密碼", // 觸發(fā)的提示信息
						trigger: "blur" // 觸發(fā)時(shí)機(jī): 當(dāng)失去焦點(diǎn)時(shí)(光標(biāo)不顯示的時(shí)候),觸發(fā)此提示,就會(huì)進(jìn)行校驗(yàn)
					},
					{
						min: 3, // 最小字符書
						max: 6, // 最大字符數(shù)
						message: "密碼長(zhǎng)度需要在3-5個(gè)字符之間", // 觸發(fā)的提示信息
						trigger: "blur"
					}
				]
			}
			//登錄
			const ruleFormRef = ref < FormInstance > () //ref獲取這個(gè)表單的所有值
			// formEl獲取到的是一整個(gè)原型,里面有很多方法和屬性
			// 比如 formEl.resetFields()就可以直接清空表單,具體可以看element的文檔
			const submitForm = (formEl: FormInstance | undefined) => {
				if (!formEl) return //沒有就返回
				// 驗(yàn)證表單,valid是一個(gè)布爾類型
				formEl.validate((valid) => {
					if (valid) { //如果為true,則調(diào)用接口,完成登錄
						login(data.ruleForm).then((res) => {
							console.log(res,'111')
							//使用 localStorage.setItem,將token保存到localStorage
							// res.data.token是后端返回的信息
							localStorage.setItem("token", res.data.token);
							// 并且跳轉(zhuǎn)到首頁
							router.push('/')
						}).catch((err)=>{
							console.log(err,'err')
						});
					} else {
						console.log('error submit!')
						return false
					}
				})
			}


			// 重置
			const resetForm = () => {
				data.ruleForm.username = "";
				data.ruleForm.password = "";
			};
			return {
				...toRefs(data),
				rules,
				ruleFormRef,
				submitForm,
				resetForm
			} //要用到的數(shù)據(jù)都要導(dǎo)出來
		}
	})
</script>

小提示: vue 請(qǐng)求報(bào)錯(cuò) Uncaught (in promise) 的解決方法 :

創(chuàng)一個(gè)axios項(xiàng)目,Vue.js,前端,javascript,vue.js??

如果promise中 reject的錯(cuò)誤沒有被捕獲到就會(huì)報(bào)這個(gè)錯(cuò)誤,只要在

Function(data).then(res => {.......})

后面加上.catch((e) => {}),就不會(huì)報(bào)錯(cuò)了?

創(chuàng)一個(gè)axios項(xiàng)目,Vue.js,前端,javascript,vue.js?

?

??結(jié)束語??

???????后續(xù)新出會(huì)陸續(xù)補(bǔ)充...文章來源地址http://www.zghlxwxcb.cn/news/detail-770240.html

到了這里,關(guān)于Vue3創(chuàng)建項(xiàng)目(四)axios封裝及接口配置的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • axios全局封裝取消請(qǐng)求,你可以創(chuàng)建一個(gè) Axios 實(shí)例,并為該實(shí)例配置默認(rèn)的 CancelToken

    可以在你的應(yīng)用中使用這個(gè)封裝過的 Axios 實(shí)例,并通過調(diào)用 instance.cancelAll() 方法來取消所有未完成的請(qǐng)求。

    2024年02月04日
    瀏覽(24)
  • 【Vue項(xiàng)目筆記心得】postman接口測(cè)試、axios二次封裝、api接口統(tǒng)一管理

    【Vue項(xiàng)目筆記心得】postman接口測(cè)試、axios二次封裝、api接口統(tǒng)一管理

    1、postman接口測(cè)試 下載地址:Download Postman | Get Started for Free ? 2、axios二次封裝 (1)為什么進(jìn)行二次封裝axios? 請(qǐng)求攔截器、響應(yīng)攔截器: 請(qǐng)求攔截器 :可以在發(fā)請(qǐng)求之前可以處理一些業(yè)務(wù) 響應(yīng)攔截器 :當(dāng)服務(wù)器數(shù)據(jù)返回以后,可以處理一些事情 安裝axios: npm?install?ax

    2023年04月08日
    瀏覽(24)
  • vue3【使用axios并封裝axios請(qǐng)求】

    vue3【使用axios并封裝axios請(qǐng)求】

    第一步:安裝axios 第二步:編寫請(qǐng)求文件 新建request.js 簡(jiǎn)單的axios封裝,里面相關(guān)提示信息,自己可以引入element-plus去添加

    2024年02月04日
    瀏覽(88)
  • vue3中axios整體封裝

    vue3中axios整體封裝

    在 vue3.x 版本中進(jìn)行封裝 使用 promise 封裝 post 和 get 方法 api 作為單獨(dú)模塊維護(hù) 適配 vue.config.js 中 proxy 代理 結(jié)合 async 和 await 1 安裝 2 創(chuàng)建http模塊 在 src 目錄下,創(chuàng)建 request 文件夾,并在該文件夾下,新建 http.js 文件 3 創(chuàng)建單獨(dú)的api模塊 4 在業(yè)務(wù)代碼中使用 5 在vue.config.js中配

    2024年02月17日
    瀏覽(86)
  • Vue3+Axios網(wǎng)絡(luò)請(qǐng)求封裝

    本文將詳細(xì)介紹一款基于Axios+Typescript封裝的網(wǎng)絡(luò)請(qǐng)求庫,該庫可以自動(dòng)攜帶token、攔截請(qǐng)求和響應(yīng)等操作,并能夠處理請(qǐng)求重復(fù)、超時(shí)和錯(cuò)誤狀態(tài)碼等異常情況。 Axios 是基于Node.js的HTTP客戶端,也是一款廣泛使用的網(wǎng)絡(luò)請(qǐng)求庫。它具有使用簡(jiǎn)單、可擴(kuò)展性高、易用性好等特點(diǎn)

    2024年02月07日
    瀏覽(90)
  • 從頭開始創(chuàng)建一個(gè)vue3.0項(xiàng)目

    vue3新變化 首次渲染更快,diff算法更快,內(nèi)存占用更少,打包體積更小 更好的Ts語法支持 Composition API 破壞語法的更新 移除了$on方法 移除過濾器選項(xiàng)(插值表達(dá)式不能夠再使用過濾器filter) 移除.sync(v-bind不能使用.sync修飾符) Vue3.0相關(guān)網(wǎng)址鏈接? Vue3.0官方地址 Vite 官網(wǎng)地址

    2023年04月26日
    瀏覽(21)
  • 創(chuàng)建一個(gè)vite+vue3項(xiàng)目詳細(xì)教程

    創(chuàng)建一個(gè)vite+vue3項(xiàng)目詳細(xì)教程

    一、首先打開本地磁盤,找到一個(gè)存放路徑 ?這里 我選擇將新建項(xiàng)目放置在E盤的demo-vitedemo路徑下 二、在該路徑處打開命令行cmd ?三、在打開的命令行中輸入創(chuàng)建命令 ?注意在搭建之前要安裝node.js環(huán)境依賴,并且確認(rèn)你的版本 Vite 需要Node.js版本 14.18+,16+。然而,有些模板需

    2024年02月15日
    瀏覽(30)
  • Vue3的axios請(qǐng)求封裝,請(qǐng)求攔截,相應(yīng)攔截

    對(duì)于三者放在Service.js中封裝,方便使用 axios.create ?的作用是創(chuàng)建一個(gè)新的? axios ?實(shí)例,該實(shí)例可以具有自定義配置。通過使用? axios.create ,您可以為任何 API 生成一個(gè)客戶端,并在使用同一客戶端的任何調(diào)用中重復(fù)使用相同的配置。這使得在應(yīng)用程序中使用多個(gè) API 時(shí)更加

    2024年02月03日
    瀏覽(91)
  • 通過Vscode 簡(jiǎn)單創(chuàng)建一個(gè)vue3+element的項(xiàng)目

    通過Vscode 簡(jiǎn)單創(chuàng)建一個(gè)vue3+element的項(xiàng)目

    確保你安裝了最新版本的?Node.js,并且你的當(dāng)前工作目錄正是打算創(chuàng)建項(xiàng)目的目錄。在命令行中運(yùn)行以下命令 輸入構(gòu)建項(xiàng)目命令,個(gè)人推薦如果有cnpm使用cnpm 創(chuàng)建成功之后 完整引入 在 main.js 中寫入以下內(nèi)容: 以上代碼便完成了 Element 的引入。需要注意的是,樣式文件需要單

    2024年02月02日
    瀏覽(50)
  • 【Vue】Vue2創(chuàng)建移動(dòng)端項(xiàng)目實(shí)戰(zhàn)教程,創(chuàng)建移動(dòng)端項(xiàng)目保姆級(jí)教程,設(shè)置axios,utils工具包,vue.fonfig.js配置項(xiàng) (下)

    【Vue】Vue2創(chuàng)建移動(dòng)端項(xiàng)目實(shí)戰(zhàn)教程,創(chuàng)建移動(dòng)端項(xiàng)目保姆級(jí)教程,設(shè)置axios,utils工具包,vue.fonfig.js配置項(xiàng) (下)

    這里是創(chuàng)建移動(dòng)端項(xiàng)目 【Vue】Vue2.x創(chuàng)建項(xiàng)目全程講解,保姆級(jí)教程,手把手教,Vue2怎么創(chuàng)建項(xiàng)目(上) 【Vue】Vue2創(chuàng)建移動(dòng)端項(xiàng)目實(shí)戰(zhàn)教程,創(chuàng)建移動(dòng)端項(xiàng)目保姆級(jí)教程,接上一篇?jiǎng)?chuàng)建Vue2項(xiàng)目(中) 【Vue】Vue2創(chuàng)建移動(dòng)端項(xiàng)目實(shí)戰(zhàn)教程,創(chuàng)建移動(dòng)端項(xiàng)目保姆級(jí)教程,設(shè)置ax

    2024年02月13日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包