1.0.1 • Published 3 years ago

gl-ajax-mock v1.0.1

Weekly downloads
-
License
UNLICENSED
Repository
-
Last release
3 years ago

接口模拟服务器

用于创建 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) 创建实例时,可以使用以下选项。
  • 所有的选项都可以省略,将使用缺省值。
参数名类型缺省值说明
corsBoolean|Objectfalse是否启用跨域支持,也支持配置 koa-cors 参数对象,例如启用跨域 Cookie 可设置 {credentials: true}
httpsBooleanfalse是否启用HTTPS服务
portNumber80服务端口
uploadDirStringundefined上传文件保存目录,缺省不保存上传文件
staticDirString|Objectundefined静态文件目录,缺省不支持返回静态文件;可以通过对象指定更多参数:{root:'静态文件目录',index:'首页文件名(缺省index.html)',hidden:是否允许返回隐藏文件(缺省false),extensions:自动补全的扩展名字符串数组(缺省false)}
baseUrlString'/'基础URL,所有接口的URL均相对于此地址,例如baseUrl:'/aa/bb/',接口URL'cc/dd'的实际地址为'/aa/bb/cc/dd',接口URL'../cc/dd'的的实际地址为'/aa/cc/dd',接口URL'/cc/dd'的实际地址为'/cc/dd'
methodString'POST'默认请求方法
formatObject定义标准响应数据格式
format.codeKeyString'code'返回码属性名
format.msgKeyString'msg'返回消息属性名
format.dataKeyString'data'返回数据属性名,如果将返回数据与返回码放在同一级,则设为null
format.succCodeString'000000'成功返回码
format.timeoutCodeString'999997'登录超时返回码
logTimeBooleantrue是否输出请求响应时间日志
logParamsBooleantrue是否输出上传参数日志
pluginFunction[][]自定义处理插件(koa中间件),如实现加解密、签名验签、会话管理、自定义日志格式等逻辑
delayNumber|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()

启动服务,开始监听指定的端口。