gl-ajax-mock
v1.0.1
Published
接口模拟服务器
Downloads
1
Readme
接口模拟服务器
用于创建 HTTP 接口模拟服务器,支持跨域、上传文件、静态文件访问、根据模板生成随机模拟数据、自定义响应数据格式、自定义插件等功能。
安装
npm install gl-ajax-mock
使用
- 具体示例可参考 /demo/server.js
const AjaxMockServer = require('gl-ajax-mock');
//创建服务器实例
let ams = new AjaxMockServer({
port: 8080,
//……
});
//添加API路由
ams.api('GET path/to/api', async (ctx, util) => {
ctx.body = {
//response data...
};
});
//启动服务
ams.start();
启动演示例子
npm start
然后在浏览器访问 http://127.0.0.1:23333/
初始化选项
- 在使用
new ApiMockServer(options)
创建实例时,可以使用以下选项。 - 所有的选项都可以省略,将使用缺省值。
| 参数名 | 类型 | 缺省值 | 说明 |-------|------|-------|------ | cors | Boolean|Object | false | 是否启用跨域支持,也支持配置 koa-cors 参数对象,例如启用跨域 Cookie 可设置 {credentials: true} | https | Boolean | false | 是否启用HTTPS服务 | port | Number | 80 | 服务端口 | uploadDir | String | undefined | 上传文件保存目录,缺省不保存上传文件 | staticDir | String|Object | undefined | 静态文件目录,缺省不支持返回静态文件;可以通过对象指定更多参数:{root:'静态文件目录',index:'首页文件名(缺省index.html)',hidden:是否允许返回隐藏文件(缺省false),extensions:自动补全的扩展名字符串数组(缺省false)} | baseUrl | String | '/' | 基础URL,所有接口的URL均相对于此地址,例如baseUrl:'/aa/bb/',接口URL'cc/dd'的实际地址为'/aa/bb/cc/dd',接口URL'../cc/dd'的的实际地址为'/aa/cc/dd',接口URL'/cc/dd'的实际地址为'/cc/dd' | method | String | 'POST' | 默认请求方法 | format | Object | | 定义标准响应数据格式 | format.codeKey | String | 'code' | 返回码属性名 | format.msgKey | String | 'msg' | 返回消息属性名 | format.dataKey | String | 'data' | 返回数据属性名,如果将返回数据与返回码放在同一级,则设为null | format.succCode | String | '000000' | 成功返回码 | format.timeoutCode | String | '999997' | 登录超时返回码 | logTime | Boolean | true | 是否输出请求响应时间日志 | logParams | Boolean | true | 是否输出上传参数日志 | plugin | Function[] | [] | 自定义处理插件(koa中间件),如实现加解密、签名验签、会话管理、自定义日志格式等逻辑 | delay | Number|Number[] | undefined | 默认延时,毫秒,固定值 或 [最小值,最大值]、[最大值]
.api('METHOD path', callback)
添加 API 路由和对应的处理函数。
- 第一个参数是请求方法和请求路径,请求方法可以是
GET|POST|PUT|DELETE
,例如
ams.api('GET demo/hello/world', async (ctx, util) => {/*...*/});
- 请求方法也可以省略,如果省略,将使用初始化参数中 method 所指定的方法;如果没有指定 method 初始化参数,则使用
POST
。
ams.api('demo/hello/world', async (ctx, util) => {/*...*/});
- 在请求路径中可以通过冒号开头的标识符定义路由参数,例如下面请求路径中的 para1 和 para2 就是两个路由参数
ams.api('GET demo/:para1/hello/:para2/world', async (ctx, util) => {/*...*/});
- 回调函数是一个异步函数(如果函数内没有异步处理逻辑,也可以省略 async),通过 ctx 可以获取客户端上传的数据,给 ctx.body 赋值可以向浏览器返回响应数据(api-mock-server 的底层框架是 Koa,可参考 https://koajs.com/#context 了解 ctx 对象的更多用法,如操作请求头、响应头信息,处理 cookie 等)
//获取URL参数
console.log('ctx.query: ', ctx.query);
//获取请求体提交的表单数据
console.log('ctx.request.body: ', ctx.request.body);
//获取路由参数
console.log('ctx.params: ', ctx.params);
//获取上传文件信息
console.log('ctx.request.files: ', ctx.request.files);
//返回JSON数据
ctx.body = {foo: '123', bar: '456'};
//返回HTML页面
ctx.body = '<!DOCTYPE html><html>……</html>';
//返回文件流(下载文件)
ctx.body = fs.createReadStream(filePath);
- util 对象提供了一些常用的工具方法
/**
* 延时
* @param {Number} time 延时时间(毫秒)
* @returns {Promise}
*/
await util.delay(1000);
/**
* 按标准格式返回成功数据
* @param {Object} data 业务数据
* @param {String} message 成功提示信息
*/
util.succ(data, message);
/**
* 按标准格式返回失败数据
* @param {Number} returnCode 错误码
* @param {String} message 错误信息
* @param {Object} data 失败时返回的业务数据
*/
util.fail(returnCode, message, data);
/**
* 按标准格式返回登录超时数据
*/
util.timeout();
/**
* 按一定几率随机返回成功或失败数据
* @param {Number} rate 成功率,0-1之间的数字,0为100%失败,1为100%成功
* @param {Object} succData 成功数据
* @param {Object} failData 失败数据
*/
util.random(rate, succData, failData);
/**
* 生成模拟数据,传两个参数返回数组,传一个参数返回对象
* 模拟数据模板使用 Mockjs 语法,请参考 http://mockjs.com/examples.html
* 此方法也可直接通过类的静态方法调用:ApiMockServer.mock()
* @param {String} [rule] 数组规则(1、+1、min-max、count)
* @param {Object} template 数组元素模板
*/
util.mock(rule, template);
.start()
启动服务,开始监听指定的端口。