在專案中嘗試了mockjs, mock資料, 實現前後端分離開發。
關於mockjs, 官網描述的是
1.前後端分離
2.不需要修改既有代碼, 就可以攔截 Ajax 請求, 返回類比的回應資料。
3.資料類型豐富
4.通過亂數據, 模擬各種場景。
等等優點。
總結起來就是在後端介面沒有開發完成之前, 前端可以用已有的介面文檔, 在真實的請求上攔截ajax, 並根據mockjs的mock資料的規則, 類比真實介面返回的資料, 並將隨機的類比資料返回參與相應的資料交互處理, 這樣真正實現了前後臺的分離開發。
與以往的自己類比的假資料不同, mockjs可以帶給我們的是:在後臺介面未開發完成之前類比資料,
下面一步步的來實現vue-cli創建項目並添加一條新聞類的資料類比介面:
1.安裝vue-cli全域腳手架
npm install --global vue-cli2.創建vue項目
vue init webpack mockjscd mockjs
npm install axios --save
3.安裝mockjs
npm install mockjs --save-dev4.專案目錄
axios/api 用來封裝axios
Hello.vue 頁面首頁
NeswCell.vue 新聞群組件
router/index.js 路由
main.js 入口js
mock.js mockjs檔
在來看下完成後的效果
5.在入口js(main.js)裡引入mockjs
// The Vue build version to load with the `import` command// (runtime-only or standalone) has been set in webpack.base.conf with an alias.import Vue from 'vue'import App from './App'import router from './router'Vue.config.productionTip = false// 引入mockjsrequire('./mock.js')/* eslint-disable no-new */new Vue({el: '#app',router,template: '這裡我添加了額一個常用的時間整理篩檢程式 getYMD
6. 添加一個mock規則(mock.js)
// 引入mockjsconst Mock = require('mockjs');// 獲取 mock.Random 對象const Random = Mock.Random;// mock一組數據const produceNewsData = function {let articles = ;for (let i = 0; i < 100; i++) {let newArticleObject = {title: Random.csentence(5, 30), // Random.csentence( min, max )thumbnail_pic_s: Random.dataImage('300x250', 'mock的圖片'), // Random.dataImage( size, text ) 生成一段隨機的 Base64 圖片編碼author_name: Random.cname, // Random.cname 隨機生成一個常見的中文姓名date: Random.date + ' ' + Random.time // Random.date指示生成的日期字串的格式,預設為yyyy-MM-dd;Random.time 返回一個隨機的時間字串}articles.push(newArticleObject)}return {articles: articles}}// Mock.mock( url, post/get , 返回的資料);Mock.mock('/news/index', 'post', produceNewsData);7.在Hello.vue 中請求文檔介面,
注意:api.JH_news是我封裝的axios函數
axios/api.js如下
import axios from 'axios'import vue from 'vue'axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'// 請求攔截器axios.interceptors.request.use(function(config) { return config; }, function(error) { return Promise.reject(error); }) // 回應攔截器axios.interceptors.response.use(function(response) { return response;}, function(error) { return Promise.reject(error);})// 封裝axios的post請求export function fetch(url, params) { return new Promise((resolve, reject) => { axios.post(url, params) .then(response => { resolve(response.data); }) .catch((error) => { reject(error); }) })}export default { JH_news(url, params) { return fetch(url, params); }}8.在NewsCell.vue展示數據
完成
9.所有代碼可以查看我的github: https://github.com/Jasonwang911/vue_mockjs