vue mock模擬后臺接口數據

vue mock

  • 一、Json server
  • 二、Mock 服務
    • 1.安裝
    • 2.創建 Mock
    • 3.main.js引入
    • 4.組件中axure請求

一、Json server

輕量級,將已有的json文件跑在服務器上供前端調用

npm install -g json-server

啟動JSON數據服務器:

json-server --watch json文件名

json-server --watch json文件 --port 指定端口

此時可請求此目錄下的json;每個json都要手寫,意義不大;所以使用下面的mock,不但能“監聽”,還能按要求模擬數據。

二、Mock 服務

  • 支持 GET / POST / PUT
  • 支持返回 json 格式
  • 支持返回結果實時替換
  • 支持按照特定參數動態返回指定內容

1.安裝

npm install mockjs --save-dev

在 package.json 文件里面提現出來的區別就是,使用 --save-dev 安裝的插件將被寫入到 devDependencies 里面,而使用 --save 安裝的插件則被寫入到 dependencies 對象里面。

2.創建 Mock

在src下創建mock文件夾,在文件夾下創建index.js,以及一個示例login文件夾和下面的index.js(模塊化)

//src/mock/index.js
import Mock from 'mockjs'
import { postLogin } from './login'// 設置全局延時 沒有延時的話有時候會檢測不到數據變化 建議保留
Mock.setup({timeout: '300-600'
})Mock.mock(/\/api\/login/, 'post', postLogin)
// Mock.mock('/api/login', 'post', postLogin)
// src/mock/login/index.js
// import Mock from 'mockjs' //由于此下無需模擬數據,故不引入mock
let passwords = {admin: '1',user: '1',
}let tokens = {admin: 'admin-token'
}let users = {'admin-token': {roles: ['admin'],introduction: 'I am a super administrator',avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',name: 'admin'}
}export const postLogin = response => {console.log(response, '開始執行mock')let res = JSON.parse(response.body)let token = tokens[res.name]let user = users[token]if (passwords[res.name] == res.password) {console.log("用戶名密碼正確")if (token) {console.log("有token",token)} else {console.log("創建新token",token)token = {}[res.name] = res.name + '-token'tokens[res.name] = tokenuser = {roles: ['admin'],introduction: 'I am a super administrator',avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif',name: res.name}users[token] = user}console.log(passwords, tokens, users)return {code: 200,data: { token, user },msg: "登陸成功"}}else {console.log("用戶名密碼錯誤")return {code: 1001,msg: '用戶名密碼錯誤'}}
}

3.main.js引入

具體看你的mock文件夾放在了哪

// 引入 mock 模擬數據
import './mock' 

4.組件中axure請求

直接使用axure請求

 axios.post(url: '/api/login',{data:{ name: "user", password: "1" }}).then(res => {console.log(res);this.$router.push("/index");}).catch((error) => {console.log(error);});

使用自己封裝后的axios請求(因為有了響應器攔截,所以支持失敗響應):

import { postLogin } from "@/api/login";postLogin({ name: "user", password: "1" }).then((res) => {console.log(res);this.$router.push("/index");}).catch((error) => {console.log(error);});

src下創建api,api下創建login.js

import request from '@/utils/request.js' 
export const postLogin = (data) => {return request({url: '/login',method: 'post',data})
}

src下創建utils,utils下創建request.js

import axios from 'axios'
import store from '@/store'
import router from '@/router'// create an axios instance
const service = axios.create({baseURL: "/api", // url = base url + request urltimeout: 5000, // request timeout
})//添加請求攔截器,若token存在則在請求頭中加token,不存在也繼續請求
service.interceptors.request.use(config => {// 每次發送請求之前檢測都vuex存有token,那么都要放在請求頭發送給服務器,沒有則不帶token// Authorization是必須的// if (store.getters.getToken) {//    config.headers.Authorization = store.getters.getToken;// }return config;},error => {console.log("在request攔截器顯示錯誤:", error.response)return Promise.reject(error);}
);//respone攔截器
service.interceptors.response.use(response => {// 在status正確的情況下,code不正確則返回對應的錯誤信息(后臺自定義為200是正確,并且將錯誤信息寫在message),正確則返回響應// 在這里當code不是200時返回錯誤,否則axure catch不到return response.data.code == 200 ? response : Promise.reject(response.data);},error => { // 在status不正確的情況下,判別status狀態碼給出對應響應if (error.response) {console.log("在respone攔截器顯示錯誤:", error.response)switch (error.response.status) {case 401://可能是token過期,清除它store.commit("delToken");router.replace({ //跳轉到登錄頁面path: '/login',// 將跳轉的路由path作為參數,登錄成功后跳轉到該路由query: { redirect: router.currentRoute.fullPath }});}}return Promise.reject(error.response);}
);
export default service

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/278666.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/278666.shtml
英文地址,請注明出處:http://en.pswp.cn/news/278666.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

個人站立會議-----20181216

繼續閱讀測量程序設計這本書,并根據測量平差基礎中的知識編寫多個已知點水準網的間接平差,結果總是差些,詢問過老師之后,才知道在程序中要增加檢索閉合歡或閉合線段的條件,正在改進中 轉載于:https://www.cnblogs.com/…

使用iOS 4越獄iPhone或iPod Touch

In case you haven’t heard the news over the past couple of days, there is now an incredibly easy way to jailbreak your iPod Touch or iPhone running iOS 4. Here we will take a look at how easy the process is. 如果您在過去的幾天里沒有聽到這個消息&#xff0c…

[轉] 深入理解React 組件狀態(State)

React 的核心思想是組件化的思想,應用由組件搭建而成,而組件中最重要的概念是State(狀態),State是一個組件的UI數據模型,是組件渲染時的數據依據。 一. 如何定義State 定義一個合適的State,是正…

vue-router query,parmas,meta傳參

1.query,顯示在導航欄?后,相當于get請求傳參 this.router.push({path:/login,query:{ redirect:/home}}) this.router.push({name:Login,query:{ redirect:/home}})2.parmas,不會顯示,相當于post請求傳參,…

Keras 獲取中間某一層輸出

1.使用函數模型API,新建一個model,將輸入和輸出定義為原來的model的輸入和想要的那一層的輸出,然后重新進行predict. 1 #codingutf-82 import seaborn as sbn3 import pylab as plt4 import theano5 from keras.models import Sequential6 fr…

在Windows 7中禁用或修改Aero Peek的“延遲時間”

Are you looking for an easy way to modify the “delay time” for Aero Peek in Windows 7 or perhaps want to disable the feature altogether? Then see how simple it is to do either with the Desktop Peek Tweak. 您是否正在尋找一種簡便的方法來修改Windows 7中Aer…

php內核分析(六)-opcode

這里閱讀的php版本為PHP-7.1.0 RC3,閱讀代碼的平臺為linux 查看opcode php是先把源碼解析成opcode,然后再把opcode傳遞給zend_vm進行執行的。 // 一個opcode的結構 struct _zend_op {const void *handler; // opcode對應的執行函數,每個opcod…

vue 監聽路由變化

一.watch監聽$route($router的對象) // 監聽,當路由發生變化的時候執行 watch:{$route(to,from){console.log(to.path);} },// 監聽,當路由發生變化的時候執行 watch: {$route: {handler: function(val, oldVal){console.log(val);},// 深度觀察監聽dee…

音頻剪切_音頻編輯入門指南:剪切,修剪和排列

音頻剪切Audacity novices often start with lofty project ideas, but sometimes they lack the basics. Knowing how to cut and trim tracks is basic audio editing and is a fundamental starting point for making more elaborate arrangements. 大膽的新手通常從崇高的項…

Mybatis自定義SQL攔截器

本博客介紹的是繼承Mybatis提供的Interface接口,自定義攔截器,然后將項目中的sql攔截一下,打印到控制臺。 先自定義一個攔截器 package com.muses.taoshop.common.core.database.config;import org.apache.commons.lang3.StringUtils; import…

搭建spring boot環境并測試一個controller

Idea搭建spring boot環境一、新建項目二、起步依賴三、編寫SpringBoot引導類四、編寫Controller五、熱部署一、新建項目 1.新建project 2.選擇SpringInitializr,選擇jdk,沒有則需要下載并配置(若選擇Maven工程則需要自己添加pom.xml所需依賴坐標和Java…

音頻噪聲抑制_音頻編輯入門指南:基本噪聲消除

音頻噪聲抑制Laying down some vocals? Starting your own podcast? Here’s how to remove noise from a messy audio track in Audacity quickly and easily. 放下人聲? 開始自己的播客? 這是在Audacity中快速輕松地消除雜亂音軌中噪聲的方法。 Th…

Dubbo集群容錯

轉自dubbo官網文檔http://dubbo.apache.org/zh-cn/blog/dubbo-cluster-error-handling.html Design For failure 在分布式系統中,集群某個某些節點出現問題是大概率事件,因此在設計分布式RPC框架的過程中,必須要把失敗作為設計的一等公民來對…

Linux基礎(day53)

2019獨角獸企業重金招聘Python工程師標準>>> 12.21 php-fpm的pool php-fpm的pool目錄概要 vim /usr/local/php/etc/php-fpm.conf//在[global]部分增加include etc/php-fpm.d/*.confmkdir /usr/local/php/etc/php-fpm.d/cd /usr/local/php/etc/php-fpm.d/vim www.co…

Mysql+Navicat for Mysql

一、mysql 1.下載安裝 Mysql官網下載地址 下載后解壓 .zip (或安裝.msi) 2.可加入全局變量mysqld (可選) 我的電腦->屬性->高級->環境變量->Path(系統變量),添加mysql下的bin目錄,如 D:\Pr…

公鑰,私鑰和數字簽名

一、公鑰加密 假設一下,我找了兩個數字,一個是1,一個是2。我喜歡2這個數字,就保留起來,不告訴你們(私鑰),然后我告訴大家,1是我的公鑰。 我有一個文件,不能讓別人看&…

MySQL中的日志類型(二)-General query log

簡介 General query log記錄客戶端的連接和斷開,以及從客戶端發來的每一個SQL語句。 日志內容格式 General query log可以記錄在文件中,也可以記錄在表中,格式如下:在文件中會記錄時間、線程ID、命令類型以及執行的語句示例如下&a…

android wi-fi_如何在Android手機上查找3G或Wi-Fi速度

android wi-fiAre you curious about what kind of connection speed you are getting with your Android phone? Today we’ll take a look at how to easily check your Wi-Fi or 3G speeds with Speedtest.net’s Speed Test app. 您是否對Android手機的連接速度感到好奇&a…

vue引入全局less實現全局變量的控制

vue引入全局less1.設置全局樣式變量的好處:2.以less為例(sass等同原理)1.vue-cli2搭建的項目(1)2.vue-cli2搭建的項目(2)3.vue-cli3、vue-cli43.vue-cli2和vue-cli3的區別4.vue-cli3和vue-cli4的…

如何在eclipse中對項目進行重新編譯

有時由于eclipse異常關閉,當我們重啟Eclipse,在啟動項目時,會報錯,說:ClassNotFound類似的錯誤,引起這種問題的原因可能是由于,Eclipse異常關閉引起的。 解決:在一個項目中&#xff…