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 环境就可以了
无需注释代码,就可以完美解决后端接口还没完成的情况

 

posted @ 2018-07-13 16:10  豆豆飞  阅读(6043)  评论(0编辑  收藏  举报