• 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 环境就可以了
    无需注释代码,就可以完美解决后端接口还没完成的情况
  • 相关阅读:
    图片滤镜高斯模糊
    context.Request.Files为NULL问题 在实现图片上传功能的时候出现在ashx等处理页面出现context.Request.Files为NULL异常,有几点需要注意:
    C#中使用代码动态改变配置文件信息
    缓存
    使用iframe实现图片上传预览效果
    loading 加载
    sql 查询每月的销售金额
    GridView数据格式化
    把图片转换成二进制--把二进制转换成图片
    asp.net js 倒计时总秒数量 和 排序
  • 原文地址:https://www.cnblogs.com/lmxxlm-123/p/9305561.html
Copyright © 2020-2023  润新知