Skip to content
/ mock Public

方便前端开发调试的mock服务器, 使用 json-server 搭建. 支持 文件上传/静态文件服务、https、触发鉴权、模拟接口、模拟请求错误、转发请求、异步操作 等功能

License

Notifications You must be signed in to change notification settings

kscript/mock

Repository files navigation

ks-mock

一个模拟服务端api的工具, 支持 https、触发鉴权、模拟接口、模拟请求错误、转发请求、异步操作 等功能

npm命令

 # 用于构建mock服务器 npm run bundle # webpack 插件模式 npm run build # 打包并运行mock服务器 npm run mock 

使用场景

1. 作为单独的 mock 服务器使用

下载

 git clone https://github.com/kscript/mock.git 

安装

 npm i 

运行

 npm run mock 

项目运行后, 打开首页(http://localhost:3030) 可查看demo

2. 在项目中使用

  • 安装
 npm i ks-mock -D 
  • 添加 mock 文件夹, 参照如下示例, 添加入口文件 index.js 和处理用于处理返回数据的文件 datas.js
// index.js const KsMock = require("ks-mock"); const datas = require('./datas.js'); new KsMock({ mockData: datas, headConfig: null, crossDomain: true, port: 3030, loginUrl: 'login', https: { key: '', cert: '' } }).server();
// datas.js module.exports = { login: { format: (method, params, result, { body }) => { Object.assign(result.data, params); // 同步 return result // 异步 return new Promise((resolve, reject) => { setTimeout(() => { // reject(result) resolve(result) }, 1e4) }) }, post: { data: {}, message: "登录成功!" } }, };
  • 在 package.json 添加命令
"mock": "node mock" 

3. 作为 webpack 插件使用

安装

 npm i ks-mock -D 

使用

// webpack.config.js const path = require('path'); const KsMock = require("ks-mock"); module.exports = { ... plugins: [ new KsMock({ // // 静态文件目录 // static: path.join(__dirname, 'upload'), // 上传文件/写入文件前的钩子 // beforeUpload(req, file, done) { // // 参数: 错误对象, 要存储的目录 // done(null, '') // }, // beforeWrite(req, file, done) { // // 参数: 错误对象, 要存储的文件名 // done(null, '') // }, mockData: {}, headConfig: null, crossDomain: true, port: 3030, // // 配置路由重写规则 // rules: { // '/api/*': '/api?name=$1' // }, // // 配置https证书 // https: { // key: '', // cert: '' // } }) ... ] }

目录结构

|- public demo文件夹
|- src 源码文件夹
|- -- auth.ts 用户权限
|- -- config.ts mock服务器的一些配置
|- -- datas.ts 返回数据
|- -- index.ts 插件模式入口
|- -- localhost.ts mock服务器模式入口
|- -- rules.ts 路由重写规则
|- -- server.ts mock服务器实例
|- -- utils.ts 一些用到的方法
|- ssl SSL证书
|- db.json json-server数据库(在其它项目中使用时, 会在process.cwd()目录生成)
|- index.js rollup打包后的插件入口
|- localhost.js rollup打包后的 mock服务器 入口
|- package.json
|- rollup.config.js rollup配置

string | ((jsonServer: Object, server: Object) => void)

配置项

属性 类型 默认值 说明
mockData object {} 模拟属性相关的配置
headConfig object null 服务器请求头设置
crossDomain boolean true 是否允许跨域 当 headConfig 不为空时, 忽略该项
port number 3030 端口号
static object/function __dirname + '/public' 静态文件目录
beforeUpload function undefined 上传文件前的钩子
beforeWrite function undefined 写入文件前的钩子
https object/undefined undefined https配置
rules object - 路由重写规则, 参考 json-server rewriter
loginUrl string - 登录地址, 如果配置了loginUrl, 那么除登录和public属性为true的接口外, 其它接口必须在登录之后才可以正常执行
logoutUrl string - 退出登录地址
interceptor function - 拦截器, 用于拦截/修改发送的请求

mockData 属性, 存放客户端请求api时的返回数据, 以及对返回数据的一些操作
支持的可选操作有:

  1. 对返回数据的包装
  2. 返回错误信息
  3. 转发请求

返回数据支持 mock.js 中的写法, 查看 mock.js 使用文档, 但如果是被 鉴权/错误处理/转发请求 拦截, 那么 mock.js 写法无效

 { // 请求地址 url: { // 默认除登录外的接口都需要鉴权, 但设置了public, 则表示当前接口不需要鉴权 public: true, /**  * 对模拟返回的数据进行包装  * @func  * @param {string} method 请求方法  * @param {object} params 请求参数  * @param {any} result 默认返回结果的副本  * @desc 无返回值时, 则放弃修改  */ format: (method, params, result) => {}, /**  * 对模拟返回的数据进行包装  * @func  * @param {string} method 请求方法  * @param {object} params 请求参数  * @param {any} result 默认返回结果的副本  * @desc 返回值说明:   * 1. function(res, headConfig) - 通过方法来自定义报错信息  * 2. object - 作为报错信息   * 3. string - 作为报错信息内容 (使用默认的报错结构)  * 4. 其它 - 没有错误, 继续向下执行~  */ error: (method, params, result) => { // 1 return function(res, headConfig){ res.writeHead(400, headConfig) res.end(JSON.stringify({ code: 400, message: '未知错误' })) } // 2 return { code: 400, message: '未知错误' } // 3 return '未知错误' }, /**  * 转发请求  * @func  * @param {string} method 请求方法  * @param {object} params 请求参数  * @param {any} result 默认返回结果的副本  * @desc relay 可以是一个url字符串  * @returns string/object/array  */ relay: (method, params, result) => { let url = '' // 返回值用于给 request 模块传参, 调用逻辑: // request.apply(request, Array.isArray(returns) ? returns : [returns]) // request中的传参字段: get为qs, post为form return url // return { // url, // [/post/i.test(method) ? 'form' : 'qs']: { // test: 123 // } // } // return [url, { // [/post/i.test(method) ? 'form' : 'qs']: { // test: 123 // } // }] }, // 请求方法, 返回数据 // 返回数据可以使用 mockjs 来填充数据, 也可以直接写json // 请求方法为函数时, 参数与format/error/ralay等方法一致, 但result为空对象, 返回值作为返回数据 // get: (method, params, result) => {} get: { // ... }, // 如果在 db.json 中配置了当前url, 则post请求会被 json-server 拦截 // 请求被拦截的优先级: 鉴权 > 错误处理error > 转发请求relay > json-server post: { // ... }, } }

流程图

流程图

License

MIT

About

方便前端开发调试的mock服务器, 使用 json-server 搭建. 支持 文件上传/静态文件服务、https、触发鉴权、模拟接口、模拟请求错误、转发请求、异步操作 等功能

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •