摘要:一是什么目前的大部分公司的項目都是采用的前后端分離后端接口的開發(fā)和前端人員是同時進(jìn)行的那么這個時候就會存在一個問題在頁面需要使用大量數(shù)據(jù)進(jìn)行渲染生成前后端開發(fā)人員的接口也許并沒有寫完作為前端的我們也就沒有辦法獲取數(shù)據(jù)所以前端工程師就需要自己
一.Mock.js是什么?
目前的大部分公司的項目都是采用的前后端分離, 后端接口的開發(fā)和前端人員是同時進(jìn)行的. 那么這個時候就會存在一個問題, 在頁面需要使用大量數(shù)據(jù)進(jìn)行渲染生成前, 后端開發(fā)人員的接口也許并沒有寫完, 作為前端的我們也就沒有辦法獲取數(shù)據(jù). 所以 前端工程師就需要自己按照接口文檔模擬后端人員提供的數(shù)據(jù), 以此進(jìn)行頁面的開發(fā).
這個時候, Mock.js的作用就體現(xiàn)出來了, 在數(shù)據(jù)量較大的情況下, 我們不用一個一個的編寫數(shù)據(jù), 只需要根據(jù)接口文檔將數(shù)據(jù)的格式填入, Mock.js就能夠自動的按需生成大量的模擬數(shù)據(jù). 且Mock.js提供了大量的數(shù)據(jù)類型, 包括文本, 數(shù)字, 布爾值, 日期, 郵箱, 鏈接, 圖片, 顏色等.
本文就簡單的介紹一下Mock.js提供的語法, 并介紹一下我平時在項目中是如何使用Mock.js去更方便的進(jìn)行開發(fā)的.
二. 下載和引入Mock.js 1. 下載Mock.jsMock.js提供多種下載方式, 本文以目前國內(nèi)最常用的npm舉例, 只需要在命令行輸入npm install mockjs
即可完成Mock.js的下載.
Mock.js暴露了一個全局的Mock對象, 我們只需要將Mock對象引入到文件中, 調(diào)用Mock對象的方法即可
CommonJS的引入方式
//CommonJS引入 let Mock = require("mockjs) //調(diào)用Mock.mock()方法模擬數(shù)據(jù) let data = Mock.mock({ "list|1-10": [{ "id|+1": 1 }] }); console.log(data);
ES6的引入方式
//ES6的引入方式 import Mock from "mockjs" let data = Mock.mock({ "list|1-10": [{ "id|+1": 1 }] }); console.log(data);三.Mock.js的簡單語法
Mock對象提供了4個方法, 分別是Mock.mock(), Mock.setup(), Mock.valid, Mock.toJSONSchema(), 一個工具庫Mock.Random. 其中我們經(jīng)常使用到的就是Mock.mock()和Mock.Random.
1. Mock.js的規(guī)范第二部分引入Mock.js的代碼中的以下部分就可以體現(xiàn)Mock.js的語法規(guī)范
"list|1-10": [{ "id|+1": 1 }]
上面的代碼被稱為數(shù)據(jù)模板, 用于告訴Mock.js生成什么樣的數(shù)據(jù), 其中數(shù)據(jù)模板中的每個屬性由三部分構(gòu)成: 屬性名, 生成規(guī)則, 屬性值:
list為數(shù)據(jù)模板中的屬性名;
1-10為生成規(guī)則(表示生成最少1個, 最多10個重復(fù)數(shù)據(jù))
[{"id|+1": 1}]是屬性值, 屬性值中可以嵌套使用屬性名和生成規(guī)則.
具體的生成規(guī)則參見: https://github.com/nuysoft/Mo...2. Mock.mock()
Mock.mock()方法是用來根據(jù)數(shù)據(jù)模板生成模擬數(shù)據(jù), 我常用到的是以下兩種傳參方式:
Mock.mock(template): 根據(jù)數(shù)據(jù)模板template生成模擬數(shù)據(jù)
let data = Mock.mock({ data: { "products|10-20": [{ name: "手機", price: 1000 }] } }) console.log(data);
Mock.mock(url, template): 攔截請求地址為url的ajax請求, 并根據(jù)數(shù)據(jù)模板template生成模擬數(shù)據(jù)
let data = Mock.mock("api/products" , { data: { "products|10-20": [{ name: "手機", price: 1000 }] } }) //使用jquery Ajax發(fā)送請求 $.ajax({ url: "api/products", type: "GET", success: function(res) { console.log(res); } })3. Mock.Random
Mock.Random是Mock.js提供一個工具類, 用于生成常用的幾種數(shù)據(jù).
生成布爾值
//使用@占位符的方式 let data = Mock.mock({ data: { boolean: "@boolean" } }) console.log(data); //使用Mock.Random調(diào)用函數(shù)的方式 let data = Mock.mock({ data: { boolean: Mock.Random.boolean() } }) console.log(data);
生成日期
let data = Mock.mock({ data: { date: Mock.Random.date("yyyy-MM-dd") } }) console.log(data);
Mock.js支持豐富的日期格式的自定義: https://github.com/nuysoft/Mo...
生成圖片
let data = Mock.mock({ data: { //用于生成高度自定義的圖片地址 imgURL: Mock.Random.image() } }) console.log(data);
生成名字
let data = Mock.mock({ data: { //生成一個英文名字 name: Mock.Random.name(), //生成一個中文名字 chineseName: Mock.Random.cname() } }) console.log(data);
更多Mock.Random工具庫提供的數(shù)據(jù): https://github.com/nuysoft/Mo...四.在Vue項目中使用Mock.js
以模擬一個登陸接口的數(shù)據(jù)為例:
1. 多帶帶寫一個mockData.js文件作為虛擬數(shù)據(jù)的生成文件.//mockData.js import Mock from "mockjs" let Random = Mock.Random; //用戶登陸信息 let userInfo = Mock.mock({ data: { responseCode: 200, responseMessage: "success", userMessage: { email: Random.email(), "id|1-10": 1, realName: Random.cname(), roleCodes: "admin", username: Random.first() } } }) let mockData = { userInfo: userInfo } export default mockData;2. 使用vuex去控制是否使用mock.js的數(shù)據(jù)
// src/store/index.js import Vue from "vue" import Vuex from "vuex" import mutations from "./mutations" import actions from "./actions" Vue.use(Vuex); const state = { //使用模擬數(shù)據(jù), 只是開發(fā)時使用, 如果不是開發(fā)時, 請務(wù)必設(shè)置為false useMock: true } export default new Vuex.Store({ state, mutations, actions })3. 在Login.vue中去實現(xiàn)請求登陸方法
//Login.vue import mockData from "../utils/mockData.js" exwport default { ... methods: { fetchUserInfo() { //如果vuex中userMock為true if (this.$store.state.useMock) { //使用延時器模擬異步 window.setTimeout(() => { let res = mockData.userInfo; //業(yè)務(wù)邏輯 }, 1000); return; } //如果vuex中userMock為false this.$axios.post("api/login", params).then(res => { //業(yè)務(wù)邏輯 }); } } }
可以看出在Login.vue的fetchUserInfo()方法中, 如果userMock為true, 將使用的是mock.js中的模擬數(shù)據(jù); 如果useMock為false, 使用的是通過Ajax請求的數(shù)據(jù). 這么寫的好處是, 你只需要在vuex中修改一下, 就可以控制所有請求接口函數(shù)中是使用Ajax請求數(shù)據(jù), 還是使用模擬數(shù)據(jù). 這樣在進(jìn)行和后臺聯(lián)調(diào)的時候, 就可以自由的切換數(shù)據(jù)了!
參考鏈接Mock.js官網(wǎng): http://mockjs.com/
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/92858.html
摘要:為了使得前端減輕對后端的依賴,在后端功能尚未實現(xiàn)的情況下保證前端進(jìn)度的開發(fā),我們一般會手動進(jìn)行一些數(shù)據(jù)模擬,即假數(shù)據(jù)。覆蓋攔截請求,目前內(nèi)置支持。 序 有時候我們開發(fā)一般會分為前后端,前端負(fù)責(zé)數(shù)據(jù)顯示和UI交互,后端負(fù)責(zé)數(shù)據(jù)IO等等。因此造成前端對后端有嚴(yán)重依賴,使得前端的開發(fā)進(jìn)度普遍滯后于后端。 為了使得前端減輕對后端的依賴,在后端功能尚未實現(xiàn)的情況下保證前端進(jìn)度的開發(fā),我們一般會手...
摘要:為了使得前端減輕對后端的依賴,在后端功能尚未實現(xiàn)的情況下保證前端進(jìn)度的開發(fā),我們一般會手動進(jìn)行一些數(shù)據(jù)模擬,即假數(shù)據(jù)。覆蓋攔截請求,目前內(nèi)置支持。 序 有時候我們開發(fā)一般會分為前后端,前端負(fù)責(zé)數(shù)據(jù)顯示和UI交互,后端負(fù)責(zé)數(shù)據(jù)IO等等。因此造成前端對后端有嚴(yán)重依賴,使得前端的開發(fā)進(jìn)度普遍滯后于后端。 為了使得前端減輕對后端的依賴,在后端功能尚未實現(xiàn)的情況下保證前端進(jìn)度的開發(fā),我們一般會手...
摘要:可以模擬數(shù)據(jù),攔截請求,返回模擬數(shù)據(jù),無需后端返回就可以測試前端程序官網(wǎng)原文首先在頭中引入我們需要的文件在請求之前,用定義返回數(shù)據(jù)表示成功,表示錯誤信息不完整彈出錯誤信息在中的要與中的相同,比如我這里是那么好了,說到這里,我們進(jìn)行測試一下調(diào) mock.js 可以模擬ajax數(shù)據(jù),攔截ajax請求,返回模擬數(shù)據(jù),無需后端返回就可以測試前端程序 mockjs官網(wǎng) 原文:http://i.j...
摘要:可以模擬數(shù)據(jù),攔截請求,返回模擬數(shù)據(jù),無需后端返回就可以測試前端程序官網(wǎng)原文首先在頭中引入我們需要的文件在請求之前,用定義返回數(shù)據(jù)表示成功,表示錯誤信息不完整彈出錯誤信息在中的要與中的相同,比如我這里是那么好了,說到這里,我們進(jìn)行測試一下調(diào) mock.js 可以模擬ajax數(shù)據(jù),攔截ajax請求,返回模擬數(shù)據(jù),無需后端返回就可以測試前端程序 mockjs官網(wǎng) 原文:http://i.j...
摘要:可以模擬數(shù)據(jù),攔截請求,返回模擬數(shù)據(jù),無需后端返回就可以測試前端程序官網(wǎng)原文首先在頭中引入我們需要的文件在請求之前,用定義返回數(shù)據(jù)表示成功,表示錯誤信息不完整彈出錯誤信息在中的要與中的相同,比如我這里是那么好了,說到這里,我們進(jìn)行測試一下調(diào) mock.js 可以模擬ajax數(shù)據(jù),攔截ajax請求,返回模擬數(shù)據(jù),無需后端返回就可以測試前端程序 mockjs官網(wǎng) 原文:http://i.j...
閱讀 3579·2021-11-08 13:30
閱讀 3651·2019-08-30 15:55
閱讀 774·2019-08-29 15:16
閱讀 1833·2019-08-26 13:57
閱讀 2166·2019-08-26 12:18
閱讀 878·2019-08-26 11:36
閱讀 1826·2019-08-26 11:30
閱讀 3260·2019-08-23 16:46