axios和mockjs的使用


axios封裝

封裝的原因:

在不同的環境中自動識別環境

get的基本使用

axios.get('api/xxx', {
  params: {}, // {} 配置信息,params 表示傳遞到服務端的數據,以url參數的形式拼接在請求地址的后面
  headers: {} // 請求頭,
}).then(res => alert(res.data));

post的基本使用

// psot 請求爨地三個參數
// 1.請求地址
// 2.傳遞的數據,在請求體中
//   axios默認發送的數據式json格式
// 3.配置信息	(可選參數)
//    headers content-type: 'application/json'  默認格式
axios.post('api/xxx',{
  usename: 'xxx',
  password: 'xxx'
},{
  params:{ // 可以添加params,url地址中出現
    
  }
}).then(res=>alert(res)).catch(err=>alert(err))

put,delete用法相同

新建request.js

import axios from 'axios'
export function get(url, params) {
  return axios.get(url,{
    params
  });
}

export function post(url,data) {
  return axios.post(url, data);
}

export function del(url) {
  return axios,delete(url);
}

export function put(url, data) {
  return axios.put(url, data);
}

調用

import {get} from '../utils/request'

get('https://xxx', {}).then(res=>alert(res)).catch(err=>alert(err));

進一步封裝

import axios from 'axios'

// 創建一個axios的對象
const instance = axios.create({
  baseURL: 'https://xxx', // 會再發送請求的	時候拼接在url參數面前
  timeout: 5000
})

export function get(url, params) {
  return instance.get(url,{
    params
  });
}

export function post(url,data) {
  return instance.post(url, data);
}

export function del(url) {
  return instance,delete(url);
}

export function put(url, data) {
  return instance.put(url, data);
}

axios的並發處理

// 請求是異步操作
axios.get('xxx'); //1
axios.get('xxx'); //2
axios.get('xxx'); //3

// ## 請求回來不保證順序:
axios.all([
  axios.get('xxx'); //1
  axios.get('xxx'); //2
  axios.get('xxx'); //3
]).then(value=>console.log(value));
// value: []; 三個數據合並在一起了,且保證了順序
//axios提供了內置方法,用與輸出返回的結果
.then(axios.spread((res1,res2,res3) => {
  console.log(res1.config.data);
  console.log(res2.config.data);
  console.log(res3.config.data);
}))

全局攔截

import axios from 'axios'

// 創建一個axios的對象
const instance = axios.create({
  baseURL: 'https://xxx', // 會再發送請求的	時候拼接在url參數面前
  timeout: 5000
})
// 請求攔截,所有的網絡請求都會先走這個方法
// 我們可以添加自定義的內容[和服務器商議]
instance.interceptor.request.use(function(config) {
  config.heads.token = '123456'
  return config;
}, function(err) {
  return Promise.reject(err);
});
//響應攔截,所有網絡請求返回數據之后都會限制性此方法
// 可以根據服務器的返回狀態碼做相應的處理
instance.interceptors.response.use(function(response) {
  return response;
}, function(err) {
  return Promise.reject(err);
});

export function get(url, params) {
  return instance.get(url,{
    params
  });
}

export function post(url,data) {
  return instance.post(url, data);
}

export function del(url) {
  return instance,delete(url);
}

export function put(url, data) {
  return instance.put(url, data);
}

Mock.js

安裝 npm install mockjs

新建文件夾Mock>mock.js

const Mock = require('mockjs');
const data = Mock.mock({
  'list|1-10': [{
     'id|+1': 1
  }]
});
console.log(data);
console.log(JSON.stringify(data, replacer:null,space:4));
// 運行

語法規范

1.數據模板定義規范

包含3個部分:屬性名,生成規則和屬性

"屬性名|生成規則" : 屬性值 // 'name|rule':value

1.1 字符串,數值有7中生成規則
生成規則 說明 示例
min-max 生成min~max之間的字符串 "list|1-10"
count 生成count個字符串 "list|5"
min-max.dmin-dmax 生成minmax之間的浮點數,小數點位數在dmindmax之間 "id|1-10.1-3 ": 1
count.dcount 生成count個字符串,小數店位數位dcount "id|8.2":1
min-max.dcount // 同上
count.dmin-dmax //同上
+step 每次進行累加一個值 "id|+1":1

2.數據占位定義規范

'lsit|5':[{
  cname:'@cname', // 內置中文姓名
  city:'@city', // 內置成實
  full:'@cname-@city'
}]
單獨輸出:
const Mock = require('mockjs');
console.log(Mock.Random.cname());
console.log(Mock.mock('@cname'));

自行擴展占位符:

eg:

Mock.Random.extend({
  cstore() {
    return this.pick([
      '寵物店',
      '美容店',
      '小吃店',
      '快餐店'
    ])
  }
})

console.log(Mock.mock('@cstore'));

axios和mock攔截混合使用

// axios 請求:
axios.request({
  method:'get',
  url: 'https://xxx'
}).then(res=>{
  console.log(res.data);
}).catch(err=>console.log(err));

// Mock數據攔截填充
Mock.mock('https://xxx', { // 請求地址相同
  "list|5-10": [
    {
      'id|+1': 1,
      'username': '@cname',
      'email': '@email',
      'gender': '@boolean',
      'price': '@integer'
    }
  ]
})

請求地址相同即可,輸出的結構實在res中。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM