日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

vite+vue3+axios+ts入门mockjs以及深入学习,直接一步精通

發布時間:2023/12/4 综合教程 33 生活家
生活随笔 收集整理的這篇文章主要介紹了 vite+vue3+axios+ts入门mockjs以及深入学习,直接一步精通 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1、入門

1.1、下載

1.2、配置與定義數據

1.3、使用方式

1.4、效果圖

2、語法規范

2.1、數據模板定義規范?

2.2、數據占位符定義規

3、深入學習mockjs

3.1、Mock.mock

3.2、Mock.setup

3.3、Mock.Random

Mock.Random?方法?

Random.extend 擴展(自定義隨機數據)

3.4、Mock.valid() 、Mock.toJSONSchema()

Mock.valid()?

?Mock.toJSONSchema()


版本:

?"axios": "^1.2.0",

"mockjs": "^1.1.0",

"vite-plugin-mock": "^2.9.6",

1、入門

1.1、下載

npm?下載axios?

 npm install axios

npm下載 mockjs +?在 vite 的mockjs的配置插件

npm i  mockjs vite-plugin-mock -D

1.2、配置與定義數據

vite.config.ts?

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
//vite-plugin-mock
import { viteMockServe } from 'vite-plugin-mock'
export default defineConfig({plugins: [vue(),viteMockServe({ //vite-plugin-mockmockPath: "./src/request/",// 指向mock下的文件,這個很重要,一定要指向 mock ,localEnabled: true, // 是否開啟開發環境(生產環境不要打開.為 false將禁用 mock 功能)})],
})

創建一個request文件夾,創建以下三個文件,分別是: (要分開也行,注意路徑就行,)

request :?用來封閉 axios

mock? ?? : 用來攔截?axios?然后自定義數據 ****?這個才是配置mockjs的數據并返回的

api? ? ? ???:??請求 axios?

這樣做可以最大化的把請求接口與mock的界線區分開,

到時候有真的接口,不要mock的某個接口時,刪除mock文件下對應的數據就行

?request/request 文件配置

import axios from 'axios'
// 創建一個 axios 實例
const request = axios.create({baseURL: 'http://127.0.0.1:5173', // 所有的請求地址前綴部分timeout: 60000, // 請求超時時間毫秒withCredentials: true, // 異步請求攜帶cookie
})
// 添加請求攔截器
request.interceptors.request.use(function (config) {// 在發送請求之前做些什么return config},function (error) {// 對請求錯誤做些什么console.error('請求錯誤', error)return Promise.reject(error)}
)
// 添加響應攔截器
request.interceptors.response.use(function (response) {// 對響應數據做點什么return response.data},function (error) {return Promise.reject(error)}
)export default request 

request/mock?定義數據 ,

這個文件在哪里,?vite.config.ts?的 mockPath 屬性值就要寫到mock.ts的上級目錄

import Mock from "mockjs";
let mock = Mock.mock({url: "/mock", //請求路徑method: "post",//請求方法response: () => {return {"data|6": [ //生成6條數據 數組{"shopId|+1": 1,//生成商品id,自增1"shopMsg": "@ctitle(10)", //生成商品信息,長度為10個漢字"shopAddress": "@county(true)", //隨機生成地址"shopStar|1-5": "★", //隨機生成1-5個星星}]}}
})
let index = Mock.mock({url: "/index",method: "get",response: () => {return {"data|6": [ //生成6條數據 數組{"shopId|+1": 1,//生成商品id,自增1"shopName": "@cname",//生成商品名 , 都是中國人的名字"shopTel": /^1(5|3|7|8)[0-9]{9}$/,//生成隨機電話號}]}}
})
//導出給mockjs處理,導出的變量名隨便定義
export default [mock,index,
]

上面 ( mock文件?) 的導出的變量名隨便定義,因為是給mockjs自動處理并返回數據的

但是Mock.mock中的url一定要和下面 ( api文件 )?的路徑要一樣,因為 url 是瀏覽器請求的數據的路徑

request/api?接口文件 ,這個文檔主要寫接口的路徑與參數

// 導入axios實例
import request from './request'
// PAI
export const login = () => request.post('/mock')
export const index = () => request.get('/index')

1.3、使用方式

<script setup lang='ts'>
import { login,index } from "../request/api";//第一種方式:使用 promise.then
login().then(res => {console.log("login", res.data);
})//第二種方式:使用 await, 但第二種會有一個警告,
let res = await index()
console.log("index", res.data);</script>

第二種方式:警報

警報的意思中:具有異步setup()的組件必須嵌套在<Suspense>中才能呈現。

解決:在父組件套一個

? ? <Suspense>

? ? ? ? <異步請求的組件></異步請求的組件>

? ? </Suspense>

這就行了,但這個<Suspense>是一個實驗性功能,其API可能會發生變化。

1.4、效果圖

mockjs的示例文檔

vite-plugin-mock的中文配置文檔

2、語法規范

Mock.js 的語法規范包括兩部分:1.數據模板定義規范? 2.數據占位符定義規

2.1、數據模板定義規范?

數據模板中的每個屬性由3部分構成:屬性名、生成規則、屬性值:

屬性名 name?、生成規則rule、屬性值 value

格式:? ?name | rule: value

注意:

1.屬性名和生成規則之間用豎線 | 分隔。

2.生成規則是可選的

3.生成規則有7種格式:

let constellationsObj = { Aries: '白羊座', Taurus: '金牛座', Gemini: '雙子座', Cancer: '巨蟹座', Leo: '獅子座',virgo: '處女座',libra: '天秤座', scorpio: '天蝎座', sagittarius: '射手座', Capricornus: '摩羯座', aquarius: '水瓶座', Pisces: '雙魚座',}let constellationsArr = ['白羊座', '金牛座', '雙子座', '巨蟹座', '獅子座', '處女座', '天秤座', '天蝎座', '射手座', '摩羯座', '水瓶座', '雙魚座']

? ?1、"name|min-max":value

? ? ? ? 1.1:如果value是srting,重復value的值,重復次數等于隨機min-max之間的次數。

? ? ? ? 1.2:如果value是number,就會隨機min-max之間選一個值

? ? ? ? 1.3:如果value是boolean,最終值是與相反值的概率

????????1.4:如果value是object,最終值是在value值中隨機min-max個值

? ? ? ? 1.5:如果value是array,最終值是重復valur值,會重復min-max之間次數

如: 1.1:"id|1-10":'1',  //第一次:'1'  ,第二次 :'11111111'1.2:"id|1-10":1,    //第一次:1   ,第二次 :81.3: "bool|1-10":true //true的的率為11為之1,false的的率為11為之101.4:"obj|1-3": constellationsObj , // 第一 obj:{aquarius:'水瓶座'}//第二 obj:{Cancer:'巨蟹座', Capricornus:'摩羯座'}  1.5: "arr|1-3": constellationsArr,//變量是 constellations ,不過是數組的//arr:['白羊座',...'雙魚座','白羊座',...'雙魚座','白羊座',...'雙魚座',]

? ?2、"name|count":value

? ? ? ? 2.1:如果value是srting,重復value的值,重復次數等于count。

????????2.2:如果value是boolean,最終值是相反值概的率倍數

? ? ? ? 2.3:如果value是object,從屬性值 object 中隨機選取 count 個屬性。

? ? ? ? 2.4:如果value是array,分兩種情況,count值為1,和1以上

???????????????????????????????count?為1的值:隨機選中array中的一個值

???????????????????????????????count?為1以上的值:最終值是重復valur值,會重復count次數

????????

如: 2.1: "id|5":'1', //=>'11111'  五個12.2: "bool|1":true, //=> true與false都是2分之1"bool|5":true, //=> true為5分之4, false都是5分之1,2.3:"obj|1": constellationsObj,//變量和上面的一樣//一次 obj:{Aries: '白羊座'} ,二次 obj:{libra: '天秤座'}2.4:"arr|1": constellationsArr,//count?為1的值//一次 arr: '雙子座' ,二次 arr: '水瓶座'"arr|2": constellationsArr,//count?為1以上的值// arr:['白羊座',...'雙魚座','白羊座',...'雙魚座']

? ?3、"name|min-max.dmix-dmax":value

? ? ? ? 3.1:生成一個浮點數,整數部分大于等于min、小于等于max,

????????????????小數部分保留dmin到dmax位,value只能是number值就行多少無所謂

如:3.1 "num|1-100.1-10": 1, 
//第一次 num: 13.502312311, 第二 num: 12.51 第三num: 53.6747

? ?4、"name|min-dcount":value

? ? ? ? 4.1:生成一個浮點數,整數部分小于等于max、大于等于dcount整數,

?????????????????小數部分保留dcount . 后的位數,value只能是number值就行多少無所謂

如:4.1 'num|1-10.2': 200,
//第一次num: 10.53 第二 num: 3.56 第三 num: 6.31

? ?5、"name|count.dmin-dmax":value

? ? ? ? 5.1:把count作為一個值并小數部分保留dmin到dmax位,

????????????????value只能是number值就行多少無所謂

如:5.1'num|1.1-10': 1,
//第一次num: 1.18737543 第二 num: 1.3170182 第三 num: 1.5665

? ?6、"name|count.dcount":value

? ? ? ? 6.1:把count作為一個值并小數部分保留dcount位,但它最終值的前幾位

????????????????由value的小數點前幾位占置,value只能是number值,且整數無用,小數有用

如:6.1 'num|1.8': 232.123
//第一次 num: 1.12377547 第二 num: 1.12379682 第三 num: 1.12356685

? ?7、"name|+step":value

? ? ? ? 7.1:如果value是number,屬性值自動加 step,初始值為?value。

????????7.2:如果value是array,最終值為上次再加 step 順序選取,會重復

如:5.1:"num|+1": 12, //第一 num: 12 第二 num: 13 第三 num: 145.2:"arr|+1": constellationsArr,//第一arr:'白羊座'  第二arr:'金牛座'   第三 arr:'雙子座'

4.value是函數Function:執行函數?function,取其返回值作為最終的屬性值

5.value是正則表達式?RegExp:根據正則表達式?regexp?反向生成可以匹配它的字符串

2.2、數據占位符定義規

占位符只是在屬性值字符串中占個位置,

并不出現在最終的屬性值中。

占位符的格式為:? @占位符? ? @占位符(參數[,參數])

注意:

1.用@來標識其后的字符串是占位符。

2.占位符引用的是Mock. Random中的方法。

3. 通過Mock. Random extend()來擴展自定義占位符。

4.占位符也可以引用數據模板中的屬性。

5.占位符會優先引用數據模板中的屬性。

6.占位符支持 相對路徑和絕對路徑。

這個 3.3、Mock.Random 會有說,知道123點,并過下就行

其實這個入門就夠,?后面都是要看文檔來配置數據的了

3、深入學習mockjs

3.1、Mock.mock

Mock.mock( rurl?, rtype?, template|function( options ) )

這個已經在入門展示過了其他使用的具體方法:mock.js學習之Mock.mock()&Mock.setup()使用_篇3

但上面這個是要在同一個組件上使用,如果你想要定義數據接口分開,還是使用我上面這種方法,

分開定義的好處就是數據來源清晰,容易修改數據、接口、請求方法等,

缺點就是要開多個文件,以及使用分開定義的mock bug有點多,這是因為mock從未更新過,但這是bug大都是可以用其它方法來避免的

后面?我用 分開定義??表示是我這種方法(一個文件定義mock數據,一個請求,還有一個要使用的組件)

組件定義??表示的是在同一個組件上定義的方法(在一個組件上定義數據并請求使用數據)

3.2、Mock.setup

配置攔截 Ajax 請求時的行為。支持的配置項只有一個:timeout 。

如果你是使用上面的鏈接的方法的話,也是在同一個組件上使用

但在我這定義數據接口分開是不行的,如何做才行?

let index = Mock.mock({url: "/index",method: "post",timeout: 1000,  //其實也很簡單,就是在定義數據這加多一個這個屬性就行response: () => { return *** }
})

?timeout :?它的參數是 ?numbe正整數?如400 ?或

????????????????string 'xx -?xx' 風格的字符串,如 "200 -600" ;?單位是毫秒?

表示 200 - 600 毫秒后才會返回響應內容,

3.3、Mock.Random

Mock.Random 是一個工具類,用于生成各種隨機數據。

Mock.Random 的方法在數據模板中稱為『占位符』,書寫格式為?@占位符(參數 [, 參數])?。

官方示例:這個可以在任何地方使用

使用方法:Mock.Random
import Mock from "mockjs";
var Random = Mock.Random//在某一組件單獨使用
Random.email()
// => "n.clark@miller.io"//在定義數據上使用  mock.ts 文件上
let index = Mock.mock({url: "/index",method: "post",response: () => {return {"email": Random.email(),// =>  { email: "v.lewis@hall.gov" }}}
})使用方法二:'@方法'
Mock.mock('@email')
// => "y.lee@lewis.org"

Mock.Random?方法?

類型 方法

基本

boolean, natural, integer, float, character, string , range,? date? , time,? ?datetime,? ?now

布爾值,? ? 自然數,整數,? 浮動,字符,? ?字符串, 范圍,日期,時間,日期時間,現在

圖像

image, dataImage

圖像,生成一段隨機的 Base64 圖片編碼(這個用定義數據接口是會報錯的,用不了)

顏色 color
文本

paragraph, sentence, word,? ?title,? ? ?cparagraph, csentence, cword, ctitle

? ?段落,? ? ?句子,? ? 單詞,? ?標題,? ?后面和前面的一樣,后面加個 c?表示是中文

名字

first, last,? name, cfirst, clast, cname

?姓 ,? ?名?,?全名? ? ,加 c?為中文

網絡

url, domain,? email,? ? ? ?ip,? ? tld

Url,域名,電子郵件,ip,頂級域名

地址

area, region

區域 , 地區

輔助

capitalize? ? : 把字符串的第一個字母轉換為大寫? ?

upper? ? ?? ? ?: 把字符串轉換為大寫,

lower?? ? ? ? ? :?為大寫,

pick? ? ? ? ? ? ?:?從數組中隨機選取一個元素,并返回

shuffle? ? ? ? ?: 打亂數組中元素的順序,并返回

雜項

? ? ? guid? ? ,? ? ? ? ? id

全局唯一標示符,? id

?Random.方法的參數比較多,就不在這說了,而且官網說的也很明的Random.方法的參數

Random.extend 擴展(自定義隨機數據)

這是官網的方法,但vue3的組合式API是沒有this的,不過它this是Random,

var Random = Mock.Random
Random.extend({constellation: (conut) => {let constellations = ['白羊座', '金牛座', '雙子座', '巨蟹座', '獅子座', '處女座', '天秤座', '天蝎座', '射手座', '摩羯座', '水瓶座', '雙魚座']//如果傳參,并且是number值,就隨機返回 conut 個值 if (conut !== undefined && Object.prototype.toString.call(conut) === '[object Number]') {let arr = []for (let i = 0; i < conut; i++) {let pickOn = Random.pick(constellations)constellations.splice(constellations.indexOf(pickOn),1)arr.push(pickOn)}return arr} else {return Random.pick(constellations)}}
})使用
let index = Mock.mock({url: "/index",method: "post",response: () => {return {"data": [{"arr": Random.constellation(2),//arr: ['雙子座', '水瓶座']"arr1": Random.constellation(4),//arr1:['摩羯座', '射手座', '獅子座']"arr2": Random.constellation(),//arr2: "射手座"}]}}
})

返回的 pick 方法是在輔助類型上的,可以從中選一個,也可以自己寫

不過我這分開定義的,它這?extend 在不同的文件用不了自定義和方法,真心覺得不用 extend 都行

自定義隨機數據最好是使用方法一 :?Random.constellation()? 記得加(),這是方法,不是屬性

因為方法二多多少少都有點問題,雖然還是在一些情況能用,但沒必要太麻煩一個個試驗

3.4、Mock.valid() 、Mock.toJSONSchema()

Mock.valid()?

校驗真實數據 data 是否與數據模板 template 匹配。

template :表示數據模板,可以是對象或字符串。

data? ? :表示真實數據

...這個.怎么說呢,應該沒人會用,有真實數據估計也沒幾個人用這個了

?Mock.toJSONSchema()

?Mock.toJSONSchema() ,

把 Mock.js 風格的數據模板 template 轉換成?JSON Schema。

那可以忽略了,無聊可以去官網看下

?完成! ✨?

總結

以上是生活随笔為你收集整理的vite+vue3+axios+ts入门mockjs以及深入学习,直接一步精通的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一级黄色片视频 | 99热在线只有精品 | 欧美男人天堂 | 911看片| 男女搞鸡网站 | 国产一区二区三区免费视频 | 亚洲精品一级片 | 亚洲一区自拍偷拍 | 日韩欧美视频一区二区三区 | 91爱视频| 综合视频在线 | 性生生活性生交a级 | 一级片免费视频 | 欧美夫妇交换xxx | 国产亚洲色婷婷久久99精品91 | 久久久久成人网站 | 伊人福利在线 | 视频一区二区国产 | 欧洲av网站 | 在线视频福利 | 久久久九九九热 | 日韩一区欧美一区 | 精品国产无码一区二区 | 四虎国产精品永久免费观看视频 | 欧美日韩在线中文字幕 | 午夜精品久久久 | 国产男男网站 | 2023天天操 | 久久久久亚洲av无码网站 | 国产三级全黄 | 筱田优av | 青草视频在线播放 | 日本大尺度吃奶做爰视频 | 午夜在线观看一区 | 成人午夜视频在线免费观看 | 亚洲中文字幕视频一区 | 欧美黄色录像视频 | 毛片亚洲av无码精品国产午夜 | 美女扒开尿口让男人捅爽 | 91亚洲精 | 欧美一级精品 | 久久久久亚洲视频 | 麻豆传媒映画官网 | 日韩一区二区在线看 | 国产又粗又猛又爽又黄又 | 日本美女高潮 | 亚洲小说区图片区都市 | jlzzjlzz亚洲日本少妇 | 午夜在线一区 | 欧美人一级淫片a免费播放 西方av在线 | youjizz少妇 | 中国美女洗澡免费看网站 | 综合一区在线 | 国产精品情侣呻吟对白视频 | 少妇高潮视频 | 日本激情视频网站 | 中国性猛交| 日韩成人一区 | 黄色网在线播放 | 亚洲无码精品一区二区三区 | 男人的影院 | 日本在线一区二区三区 | 日本一区二区免费在线观看 | 91蝌蚪91密月 | 成人区人妻精品一区二区不卡视频 | 欧美人和黑人牲交网站上线 | av色婷婷 | 噼里啪啦免费高清看 | 天天色棕合合合合合合合 | 国产乱人乱偷精品视频a人人澡 | 四虎黄色影视 | 精品人妻午夜一区二区三区四区 | 99爱在线| 国产新婚疯狂做爰视频 | 美妇av| 亚洲av无码乱码国产精品 | 欧美三级色图 | av黄色一级片 | 日韩中文字幕在线看 | 激情一区| 日本一区二区三区久久久久 | aaaa黄色片| 性欧美极品另类 | 黄色录像片子 | 亚洲图片视频在线 | 亚洲精品福利在线观看 | 国产又粗又黄又猛 | 女生裸体无遮挡 | 琪琪午夜伦理影院7777 | 91爱在线观看 | 手机在线亚洲 | 91成人看 | 九九这里只有精品视频 | 91黄址 | 国产精品免费视频观看 | 国产情侣一区二区 | 青青青青操 | 欧美专区在线视频 | 日狠狠 |