mock的使用及取消,node模仿本地請求:為了解決前后端分離,用戶后台沒寫完接口的情況下


借鑒:https://www.jianshu.com/p/dd23a6547114

1、說到這里還有一種是配置node模擬本地請求

    (1)node模擬本地請求: 補充一下

【1】首先在根目錄下建一個data.json,用來存放一些返回數據,名字隨便取好了
[2]在webpack.dev.conf.js文件里
    在這個const portfinder = require('portfinder')的下面
  
 1、  //模擬后台請求
const express = require('express')
const app = express()
var appData = require('../data.json')//加載本地數據文件
var seller = appData.seller//獲取對應的本地數據
var goods = appData.goods
var ratings = appData.ratings//這里獲取導數據的變量名自己看着定義好了
var mine = appData.mine
var apiRoutes = express.Router()
app.use('/api', apiRoutes)
//第一部分結束-----------------

2、第二部分,在devServer對象里面加
before(app){
          //模擬后台請求第二部分
            app.get('/api/seller', (req, res) => {
                res.json({
                  errno: 0,
                  data: seller
                })//接口返回json數據,上面配置的數據seller就賦值給data請求后調用
            }),
            app.get('/api/goods', (req, res) => {
              res.json({
                errno: 0,
                data: goods
              })
            }),
            app.get('/api/ratings', (req, res) => {
              res.json({
                errno: 0,
                data: ratings
              })
            }),
            app.get('/api/mine', (req, res) => {
              res.json({
                errno: 0,
                data: mine
              })
            })
      }


3、然后前端頁面正常請求就好了
var url = 'http://localhost:8081/api/mine';
                var data = '';
                      this.$http.get(url).then((response) => {
                          var result = JSON.parse(response.bodyText).data.content;
                    this.tqzData = result.tqz.loops;
                    this.myOrder = result.myOrder;
                    this.tools = result.tools;
                    
                    this.$nextTick(function(){
                         that.setBgImg();//用setTimeout 200也可以獲取到
                    })

                })

2、mock自己簡單的使用

import Mock from 'mockjs'
import navlist from './navlist'
import login from './login'
import echarts from './echarts'
import table from './table'
import groupList from './groupList'
import getToken from './getToken'

let data = [].concat(navlist, login, echarts, table, groupList, getToken)

data.forEach(function(res){
    Mock.mock(res.path, res.data)
})

export default Mock


例如 login.js
var data = {
    'login': '@boolean',
    'captcha': "@image('100x40', '#FFFFFF', '@word')",
    'message': '這里是登錄提交后錯誤提示信息@increment',
    'uid': '@id',
    'name': '@cname',
    'token': '@guid'
}

export default [{
    path: '/login',
    data: data
}]


頁面調用這個接口
     axios({
                url: '/login',
                method: 'post',
                data: {
                    param:''
                }
            }).then(res => {
                if(res.login){// 把token和用戶名存到  cookie里
                    commit('setToken', res.token)
                    commit('user/setName', res.name, { root: true })
                }
                resolve(res)
            })

 

3、查了下資料,mock的功能是攔截ajax的請求,模仿后台的接口返回數據,下面是看到別人文章覺得介紹很詳細,摘錄一下

(1)mock的使用  ****
// 使用 Mock
let Mock = require('mockjs');
Mock.mock('http://1.json','get',{
    // 屬性 list 的值是一個數組,其中含有 1 到 3 個元素
    'list|1-3': [{
        // 屬性 sid 是一個自增數,起始值為 1,每次增 1
        'sid|+1': 1,
        // 屬性 userId 是一個5位的隨機碼
        'userId|5': '',
        // 屬性 sex 是一個bool值
        "sex|1-2": true,
        // 屬性 city對象 是對象值中2-4個的值
        "city|2-4": {
            "110000": "北京市",
            "120000": "天津市",
            "130000": "河北省",
            "140000": "山西省"
        },
        //屬性 grade 是數組當中的一個值
        "grade|1": [
            "1年級",
            "2年級",
            "3年級"
        ],
        //屬性 guid 是唯一機器碼
        'guid': '@guid',
        //屬性 id 是隨機id
        'id': '@id',
        //屬性 title 是一個隨機長度的標題
        'title': '@title()',
        //屬性 paragraph 是一個隨機長度的段落
        'paragraph': '@cparagraph',
        //屬性 image 是一個隨機圖片 參數分別為size, background, text
        'image': "@image('200x100', '#4A7BF7', 'Hello')",
        //屬性 address 是一個隨機地址
        'address': '@county(true)',
        //屬性 date 是一個yyyy-MM-dd 的隨機日期
        'date': '@date("yyyy-MM-dd")',
        //屬性 time 是一個 size, background, text 的隨機時間
        'time': '@time("HH:mm:ss")',
        //屬性 url 是一個隨機的url
        'url': '@url',
        //屬性 email 是一個隨機email
        'email': '@email',
        //屬性 ip 是一個隨機ip
        'ip': '@ip',
        //屬性 regexp 是一個正則表達式匹配到的值 如aA1
        'regexp': /[a-z][A-Z][0-9]/,
    }]
})

2、如何攔截ajax請求
Mock.mock( rurl, rtype, template )
 
如 Mock.mock('1.json','get',{
   'sid|+1': 1,
} )
記錄數據模板。當攔截到匹配 rurl 和 rtype 的 Ajax 請求時,
將根據數據模板 template 生成模擬數據,並作為響應數據返回。

3、如何在后端接口完成的時候,取消mock數據
new webpack.DefinePlugin({
       'process.env': {
            NODE_ENV: '"mock"'
       }
}),
process.env.NODE_ENV=='mock' && require('./mock/1.js');
process.env.NODE_ENV=='mock' && require('./mock/2.js');

根據webpack環境,在需要mock的時候,配置環境為mock,
在不需要mock的時候,只需要修改node_env 環境就可以了
無需注釋代碼,就可以完美解決后端接口還沒完成的情況

 


免責聲明!

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



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