• Mock数据


    Mock数据

    mockjs
    安装
    第一种:
    
    # 安装
    npm install mockjs
    第二种使用CDN:
    
    https://cdnjs.cloudflare.com/ajax/libs/Mock.js/1.0.0/mock.js
    直接在Header部分引用即可。
    
     
    
    示例:
    
    // 使用 Mock
    var Mock = require('mockjs')
    var data = Mock.mock({
        // 属性 list 的值是一个数组,其中含有 1 到 10 个元素
        'list|1-10': [{
            // 属性 id 是一个自增数,起始值为 1,每次增 1
            'id|+1': 1
        }]
    })
    // 输出结果
    console.log(JSON.stringify(data, null, 4))
     
    
    语法
    数据模板定义规范 DTD
    
    # 格式
    
    // 属性名   name
    // 生成规则 rule
    // 属性值   value
    'name|rule': value
    注意:
    
    属性名 和 生成规则 之间用竖线 | 分隔。
    
    生成规则 是可选的。
    
    生成规则
    
     
    
    有 7 种格式:
    
    'name|min-max': value
    
    'name|count': value
    
    'name|min-max.dmin-dmax': value
    
    'name|min-max.dcount': value
    
    'name|count.dmin-dmax': value
    
    'name|count.dcount': value
    
    'name|+step': value
    
    *生成规则* 的 含义 需要依赖 *属性值的类型* 才能确定。
    
    属性值 中可以含有 @占位符。
    
    属性值 还指定了最终值的初始值和类型。
    
    示例:
    
    const Mock = require("mockjs");
    ​
    const params = 2;
    const key = "lists|" + params;
    ​
    const result = Mock.mock({
      code: 200,
      [key]: [
        {
          "number1|1-100.1-10": 1,
          "number2|10.1-10": 1,
          "number3|11.3": 1000,
          "number4|123.10": 1.123,
          "id|+1": 1
        }
      ],
      msg: "mock msg"
    });
     
    
    数据占位符定义规范
    
    # 格式
    
    @占位符
    @占位符(参数 [, 参数])
     
    
    常规应用
    Demo1:
    
    在HTML中直接使用script标签引用mockjs
    
    在页面中拦截ajax请求
    
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <meta http-equiv="X-UA-Compatible" content="ie=edge" />
        <title>Document</title>
        <script src="https://cdn.staticfile.org/Mock.js/1.0.0/mock-min.js"></script>
        <script src="https://cdn.staticfile.org/jquery/3.4.1/jquery.min.js"></script>
      </head>
      <body>
        <div id="app"></div>
        <script>
          Mock.mock(/^/lists/, "get", {
            code: 200,
            data: {
              "lists|1-10": [
                {
                  "id|+1": 0
                }
              ]
            }
          });
          $.ajax({
            url: "/api/lists",
            type: "get",
            dataType: "json",
            success: function(data) {
              if (data.code === 200) {
                var obj = data.data;
                var elem = "";
                $.each(obj.lists, function(item) {
                  elem += "<div>" + item + "</div>";
                });
                $("#app").append(elem);
              }
            }
          });
        </script>
      </body>
    </html>
     
    
    Demo2:
    
    在Vue工程化项目中进行引用:
    
    Mock.js
    
    // 拦截请求
    import Mock from "mockjs";
    ​
    Mock.mock(//get/, {
      code: 200,
      "data|10": [
        {
          "id|+1": 1,
          name: "@cname",
          email: "@email",
          picture: "@image('120x120', '#dcdcdc')",
          remark: "@title",
          address: "@city(true)",
          "gender|0-1": 0,
          hobby: "@hobby"
        }
      ]
    });
    ​
    export default Mock;
     
    
    在Main.js中进行引用
    
    if (process.env.NODE_ENV !== "production") require("@/mock/index");
     
    
    Json-server
    安装与使用
    npm install -g json-server
    创建一个db.json的文件:
    
    {
      "posts": [
        { "id": 1, "title": "json-server", "author": "typicode" }
      ],
      "comments": [
        { "id": 1, "body": "some comment", "postId": 1 }
      ],
      "profile": { "name": "typicode" }
    }
    然后,使用:
    
    json-server --watch db.json
    就可以在http://localhost:3000/posts/1获取对应的数据了:
    
    { "id": 1, "title": "json-server", "author": "typicode" }
    所有数据的POST, PUT, PATCH,DELETE请求都会得到响应。
    
     
    
    <!-- [Mockjs]结合json-server的综合应用模拟整个请求过程: -->
    1,npm install -S mockjs
    
    2,api-json.js里:
    const Mock = require('mockjs')
    const data = () => {
      const result = { test: {},new:{} }  //多个接口  http://localhost:80/test    http://localhost:80/new
      result.test = Mock.mock({
        'lists|5-10': [{
          'id|+1': 1,
          'name': '@cname'
        }],
        "comments": [
          { "id": 1, "body": "some comment", "postId": 1 }
        ]
      })
      result.new = Mock.mock({
        'lists1|5-10': [{
          'id|+1': 1,
          'name': '@cname'
        }]
      })
      return result
    }
    
    module.exports = data
    
    3,运行:json-server api-json.js --port=10000
     
    
    动态数据
    例如启动json-server的命令:json-server --watch app.js 是把一个js文件返回的数据托管成web服务。
    
    app.js配合mockjs库可以很方便的进行生成模拟数据。
    
    const Mock = require("mockjs");
    const Random = Mock.Random;
    ​
    const key = "lists|6-10";
    // const result = Random.capitalize("hello");
    // 自定义占位符
    Random.extend({
      hobby: function() {
        var arr = ["swim", "run", "play computer game", "ride"];
        return this.pick(arr);
      }
    });
    ​
    const result = Mock.mock({
      [key]: [
        {
          "id|+1": 1,
          name: "@cname",
          email: "@email",
          picture: "@image('120x120', '#dcdcdc')",
          remark: "@title",
          address: "@city(true)",
          "gender|0-1": 0,
          hobby: "@hobby"
        }
      ]
    });
    ​
    module.exports = () => result;
    当json-server启动之后,mock数据就不会变化了,可以使用nodemon配合着使用,以达到接口随机数据变化的目的。
    
     
    
    自定义路由
    当然你可以自定义路由:
    
    $ json-server --routes route.json --watch db.json
    route.json文件
    
    {
      "/api/*": "/$1",
      "/:resource/:id/show": "/:resource/:id",
      "/posts/:category": "/posts?category=:category",
      "/articles\?id=:id": "/posts/:id"
    }
    对应的请求会进行转发:
    
    /api/posts # → /posts
    /api/posts/1  # → /posts/1
    /posts/1/show # → /posts/1
    /posts/javascript # → /posts?category=javascript
    /articles?id=1 # → /posts/1
     
    
    过滤查询
    查询数据,可以额外提供
    
    GET /posts?title=json-server&author=typicode
    GET /posts?id=1&id=2
    
    # 可以用 . 访问更深层的属性。
    GET /comments?author.name=typicode
    还可以使用一些判断条件作为过滤查询的辅助。
    
    GET /posts?views_gte=10&views_lte=20
    可以用的拼接条件为:
    
    _gte : 大于等于
    
    _lte : 小于等于
    
    _ne : 不等于
    
    _like : 包含
    
    GET /posts?id_ne=1
    GET /posts?id_lte=100
    GET /posts?title_like=server
    分页查询
    
    默认后台处理分页参数为: _page 第几页, _limit一页多少条。
    
    GET /posts?_page=7
    GET /posts?_page=7&_limit=20
    默认一页10条。
    
    后台会返回总条数,总条数的数据在响应头:X-Total-Count中。
    
    排序
    
    参数: _sort设定排序的字段
    
    参数: _order设定排序的方式(默认升序)
    
    GET /posts?_sort=views&_order=asc
    GET /posts/1/comments?_sort=votes&_order=asc
    支持多个字段排序:
    
    GET /posts?_sort=user,views&_order=desc,asc
     
    
    
  • 相关阅读:
    javascript
    javascript
    javascript
    easyui datagrid checkbox multiple columns have been done do
    combogrid获取多个字段的方法
    jquery显示、隐藏div的方法
    纠正jQuery获取radio选中值的写法
    comgrid获取多选值
    xheditor
    java向图片上写字,两个图片合并的方法
  • 原文地址:https://www.cnblogs.com/xm0328/p/13782088.html
Copyright © 2020-2023  润新知