===========
构造数据服务
安装与配置
选择npm安装
npm install mockservice
gitub安装 (需要支持git协议)
npm install git://github.com/fcfe/mockservice.git
配置edp服务器
/// (如果开发依赖不是是edp环境,绕道mock-cli)
配置方法: 在edp-webserver-config文件中添加如下代码
exportsport = 8848; var ms = ; ms; // edp 通过getLocations 路由请求处理器 exports { return // 将特定请求转向代理 location: /path=GET\/nikon/ handler: ms; // 其它请求转为本地mock location: /^\/request.ajax/ handler: ms ; };
多个项目模块的配置
- 传入config为数组
ms;
- 多次config
ms; ms;
- 配置说明
- 每个模块的配置独立可以有分别的dir和packages配置
packages
不同模块可以共享,因此不可命名冲突- 多次
logError
配置只有最后一次有效 - 建议
packages
、cache
、pathRegs
的配置分别写到项目模块配置文件ms-config.js
文件中
- 启动服务器
edp ws start
- 使用edp时建议mocksrvice安装在项目代码上一级目录, 如
F://fengchao/node_modules
mock-cli
-
如使用独立服务器; 需要全局安装
npm install mocksrvice -g
;// 进入工作路径 cd workspace
// 启动mock服务器 mock 8848
ms-config.js配置
ms-config.js 文件是可选文件,配置是为了使用更方便 ms-config.js 文件可以放到目标文件夹下;只影响当前文件夹或子文件夹下的模块
详细配置参考 config 详细说明;
moduleexports = // mock接口文件是否缓存 cache: false // 接口匹配规则 pathRegs: /\w+_\w+/ 'scookie' 'zebra' // 以下配置只在baseDir中有效 // packages 定义了基于basedir的寻址方式 packages: 'lib': './lib' 'tpl': './template' // 如果不写logError,则错误信息不显示输出 logError: // 如果不指定logFile,则将错误信息输出到控制台 logFile: 'ms-erorr.log' ;
使用说明
启动程序后ms自动扫描目录下所有index.js文件及符合特定规则的文件(如果需要,规则可由ms-config.js文件配置);
mock文件不会立即加载;只有请求触发时会加载;且不进行缓存;
测试:启动edp或mock程序;浏览器中测试,或发curl请求
http://localhost:8848/request.ajax?path=GET/auth¶m={}
构造mock数据规范
- 请求规范
以下规范为默认的请求规范,如果不符合,可自定义getContext方法获取
path
、param
和Context
对象
前端代码发送真实请求;请求路径符合request.ajax?path=XXX形式; 参数param可以是POST或GET参数 param符合严格规范的json格式
- 构造数据代码规范
所有响应request.ajax?path={pathname}¶m={object}请求每个pathname对应一个mock文件;
mock文件名
/
替换为_
;
独立mock文件命名为{pkgname}/{pathname}.js;
-- 对应每个接口应该指定一个响应函数;响应函数有固定参数列表(path, param, context)
-- index.js 文件可以定义多个接口的响应函数 (但是不建议写到index文件)
-- {pathname}.js 文件只能定义对应pathname的响应函数
————————————————————————
mock文件示例
// mock 的用法参考./test的文件 /** * 参数说明 * * @param * @param * @param * @param * @param {function({array|object})} context.setCookie * @param */module { // tpl在packages定义了路径 var tpl = ; // lib/mendb是基于menset概念设计(未完全实现) var db = ; /** * * moment, random, template 为支持mockservice内置的组件 */ var moment = ; // 时间格式化组件 var random = ; // 随机数据产生器 var template = ; // 基于etpl的模板解析引擎 /** * 因为采用的是menset设计,因此直接赋值相当于改变了数据集 * db 支持数据集的增删改查 */ var hospital = dbhospital0; // 修改hospital的访问量 hospitalvisitCount++; // 业务数据 var data = timestamp: random title: tpltitlehospital creative: tpl ; // 返回数据 return status: 200 // 业务status,与http状态无关 _status: 300 // 指定http状态; 不输出 _timeout: 1000 // 延迟发送毫秒时间;不输出 data: data ;}; // 注意db相关的功能尚在完善与测试中;暂不要在业务中使用// 以上代码参考 test/response/GET_hospital.js
扩展modules 说明
扩展的modules是为了更好的支持mock数据的生成;
所有的modules通过require(modulename)既可以获取到;
从v0.1.12开始停止使用include; 全部使用require方式获取组件;
mockservice; 内置了以下通用mock支持组件
- random : 产生随机数据
- storage : 数据增删改查操作支持
- template : 采用的是etpl解析引擎,方便模板化产生数据
- moment : 基于moment.js时间格式化组件(无多国语言包)
调试
- 在执行参数列表中出现
--debug
字段,即可进入调试模式; - 为方便调试,建议安装node-inspector;即
npm install node-inspector -g
# edp 环境调试 edp ws start --debug
ISSUE todo
- 构造数据支持简单物料读写逻辑