Skip to content

Latest commit

 

History

History
140 lines (118 loc) · 4.4 KB

README-CN.md

File metadata and controls

140 lines (118 loc) · 4.4 KB

fun-mock

mock数据更友好和强大

  • 支持 es6 import/export, import导入库,export输出函数和对象

  • 使用mock回调输出mock数据,参数对象属性:request、response、delay(延迟响应ms)、validate(验证 参数和请求方式)

  • 使用 validate 进行params及method校验

    params校验规则参考:node-input-validator

    method校验方式支持 get|post|put|delete|patch

  • 支持 mockjs 数据模板语法

  • 提供url动态路径匹配的通配符功能:一个 * 只匹配mock文件名,2个 ** 匹配mock的多级路径名及文件名

  • 支持 热加载(配置hotServer)

Install

Install with npm:

$ npm install --save-dev fun-mock

Uses

在webpack.config.js或vue.config.js的devServer中配置

const es6Mock = require('fun-mock');

module.exports =  {
  devServer: {
    before: function (app, server) {
      app.use(es6Mock({
        // 模拟数据js存放根目录
        dir: './mock',
        // url访问根路径名称 
        path: '/api',
        // add express json bodyParser
        app: app,
        // 添加热加载
        hotServer: server
      }));
    }
  }
}

Mock Data Example

// import 导入工具库
import path from 'path';
import fs from 'fs';
// import 导入其他mock模块
import test1 from './test1';
import test2 from './test2';

export default async function ({
  request,
  validate,
  delay
}) {
  // 延迟ms
  await delay(400);

  // 校验数据
  await validate({
    param: {
      name: 'required|string',
      id: 'required|integer'
    },
    // 请求方法校验
    method: 'get|post'
  });

  // 导出mock数据
  return {
    // 使用mockjs数据模板
    'code|1-10': '0',
    data: {
      "switch|1-2": true,
      name: 'test03.js',
      // 组装其他mock数据,数据量大的时候非常有用
      test1: await test1({
        request,
        validate,
        delay
      }),
      test2: await test2({
        request,
        validate,
        delay
      }),
      // 获取请求get参数
      param: request.query,
      // 获取请求post参数
      param2: request.body,
      // 支持node各种骚操作
      existTest1: fs.existsSync(path.join(__dirname, 'test1.js')),
      existTest0: fs.existsSync(path.join(__dirname, 'no-exist.js'))
    }
  };
};

文件名通配符使用说明

使用通配符解决url中经常出现路径中包含一个(如经常出现的id或使用RESTful API)或多个动态参数的情况,此时需要匹配到合适的mock文件并响应内容。

  • 在mock文件名称中使用 ***,可以与字母组合使用。

  • 一个 * 表示只匹配文件名称,连续 ** 匹配多级路径名称和一个文件名称。

  • 通配符与字母组合使用时,注意通配符位置,分为前匹配(test*.js) 后匹配(*test.js) 居中匹配(*test*.js) 全匹配(*.js)

  • 注意文件名通配符的匹配顺序,无通配符的优先级最高,1个通配符次之(内部根据通配符位置的顺序: 前匹配 后匹配 居中匹配 全匹配),然后是2个连续通配符(内部根据通配符位置的顺序:后匹配 前匹配 前后匹配 全匹配)。

    如果一个mock文件夹目录存在如下的文件列表:

    mock dir:
        wildcard
            test.js
            test*.js
            *test.js
            *test*.js
            *.js
            test**.js
            **test.js
            **test**.js
            **.js

    按照列表依次匹配,匹配成功则结束匹配,并以该文件内容作为请求响应:

    • 优先匹配文件名: test.js (url: /api/wildcard/test)
    • 然后匹配文件名: test*.js (url: /api/wildcard/test222)
    • 然后匹配文件名: *test.js (url: /api/wildcard/111test)
    • 然后匹配文件名: *test*.js (url: /api/wildcard/111test222)
    • 然后匹配文件名: *.js (url: /api/wildcard/111222)
    • 然后匹配文件名: test**.js (url: /api/wildcard/test111/222)
    • 然后匹配文件名: **test.js (url: /api/wildcard/111/222test)
    • 然后匹配文件名: **test**.js (url: /api/wildcard/111/222test333/444)
    • 最后匹配文件名: **.js (url: /api/wildcard/111/222/333)

    提示:每行小括号中url可以成功获取到为当前的mock文件的内容做为响应