nodejs结合apiblue实现MockServer
apiblue功能很强大,里面支持很多插件,这些插件能够为restfulAPI提供接口文档自动生成,甚至Mockserver的功能,当然,好多插件还是有很多坑的。下面用apiblue实现下面的业务需求:
1、用户上传.md文件,自动启动mock动作,生成一套api测试服务
2、根据.md文档自动生成html接口文档
3、当.md文档发生crud操作的时候,文档和mockServer自动更新
drakov将.md文档中的接口自动生成Mockserver,关键代码如下:
var drakov = require('drakov');
var aglio = require('./aglio');
var path = require('path');
var sourceFiles = path.resolve(__dirname, '../mfiles/**.md');
var fs = require("fs");
var argv = {
sourceFiles: sourceFiles,//md文档存储地
serverPort: 4007,
disableCORS: false,//false允许跨域访问
debugMode: true,
discover: true,
public: true,//true允许外围ip访问api,false只能本地访问
watch: true,
method: ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS']
};
module.exports = function (mdFileUrl) {
try {
if ((mdFileUrl && typeof (mdFileUrl) === "string" && mdFileUrl.indexOf(".md") > -1) || mdFileUrl == '') {
drakov.stop(function () {
// stopped Drakov
console.log('drakov Finished');
});
drakov.run(argv, function () {
console.log('drakov start');
});
if (mdFileUrl) {
aglio(mdFileUrl);
}
}
} catch (e) { } finally { }
}
https://github.com/Aconex/drakov 这是drakov git地址,上面介绍了使用中间件的方式实现drakov与express结合,当时有问题,drakov的watch功能失效,md文档发生改变,无法更新apiServer。
var aglio = require('aglio');
var path = require('path');
var fs = require('fs');
var aglio_options = {
themeTemplate: 'default',//aglio样式
locals: {
myVariable: 125
}
};
module.exports = function(mdFileUrl) {
if (mdFileUrl) {
var targetUrl = mdFileUrl.replace("/mfiles/", "/mock-ui/").replace(".md", ".html");
aglio.renderFile(mdFileUrl, targetUrl, aglio_options, function(err, warnings) {
if (err)
return console.log(err);
}
);
}
}
watch监控存放md文件的文件夹,实时通知drakov和aligo,关键代码如下:
var watch = require('watch');
var drakov = require('./drakov');
module.exports = function (watchDir) {
try {
var filepath;
watch.watchTree(watchDir, function (f, curr, prev) {
if (typeof f == "object" && prev === null && curr === null) {
// Finished walking the tree
drakov('')
} else if (prev === null) {
// f is a new file
if (filepath != f) {
drakov(f, 'new');
filepath = f;
}
} else if (curr.nlink === 0) {
if (filepath != f) {
// f was removed
drakov(f)
}
} else {
// f was changed
drakov(f)
}
})
console.log("watching file...");
} catch (e) {
console.log(e.message);
} finally { }
}
ok 根据这三个js,你就可以建一个MockServer,就像 easymock(www.easy-mock.com)一样,试试吧。。对于需求工程师很有帮助
欢迎关注我的订阅号

nodejs结合apiblue实现MockServer的更多相关文章
- Nodejs【单机】多进程模式集群
Nodejs[单机]多进程模式集群实例: 1.安装:npm install -s cluster 2.服务代码: var debug = require('debug'); var express = ...
- NodeJs之OS
OS Node.js提供了一些基本的底层操作系统的模块OS. API var os = require('os'); console.log('[arch] 操作系统CPU架构'+os.arch()) ...
- NodeJs之Path
Path模块 NodeJs提供的Path模块,使得我们可以对文件路径进行简单的操作. API var path = require('path'); var path_str = '\\Users\\ ...
- NodeJs之调试
关于调试 当我们只专注于前端的时候,我们习惯性F12,这会给我们带来安全与舒心的感觉. 但是当我们使用NodeJs来开发后台的时候,我想噩梦来了. 但是也别泰国担心,NodeJs的调试是很不方便!这是 ...
- NodeJs在Linux下使用的各种问题
环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...
- NodeJs之child_process
一.child_process child_process是NodeJs的重要模块.帮助我们创建多进程任务,更好的利用了计算机的多核性能. 当然也支持线程间的通信. 二.child_process的几 ...
- nodejs进阶(6)—连接MySQL数据库
1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...
- 图片访问实时处理的实现(nodejs和php)
我在访问时光网.网易云音乐等网站时,发现将它们页面中的一些图片URL修改一下就可以得到不同尺寸的图片,于是思考了其实现方案,我的思路是:URL Rewrite + 实时处理 + 缓存,对用户请求的UR ...
- nodejs进阶(4)—读取图片到页面
我们先实现从指定路径读取图片然后输出到页面的功能. 先准备一张图片imgs/dog.jpg. file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明'binary'.(file. ...
随机推荐
- IntelliJ IDEA 2017版 编译器使用学习笔记(七) (图文详尽版);IDE快捷键使用;IDE代码重构(编写高质量代码)
一.重构 重构变量:将语义模糊的变量名称改为更易理解的名称 修改变量名称,快键键 shift + F6 (输入要改的名字,所有位置相同的名字都会改变) 重构方法 ...
- #微码分享#AES算法的C++包装类
AES为Advanced Encryption Standard的缩写,中文名:高级加密标准,在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准,用来替代DES.基于std:: ...
- leetcode - [5]Insertion Sort List
Sort a linked list using insertion sort. 思路:插入排序 #include <iostream> using namespace std; stru ...
- java基本语法、标识符、关键字
基本语法 编写Java程序时,应注意以下几点: 大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的. 类名:对于所有的类来说,类名的首字母应该大写.如果类名由若干单词组 ...
- Max Sum—hdu1003(简单DP) 标签: dp 2016-05-05 20:51 92人阅读 评论(0)
Max Sum Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- hdu1258
给你两个数t,n 接下来输入n个数字 让你输出所有数字相加等于n的组合 4 6 4 3 2 2 1 1 t n 4 3+1 2+2 2+1+1 Sample Input 4 6 4 3 2 2 1 1 ...
- AngularJS AOP 实例
AngularJS有种机制叫做拦截器(interceptor),它是$http扩展点,类似ASP.NET MVC的过滤器filter机制,对每个$http请求的发送和接收过程进行过滤. $httpPr ...
- 10.Date对象
Date()对象 Date对象用于处理日期和时间. Math对象 ◆Math.ceil() 天花板函数 向上取整 ★如果是整数,取整之后是这个数本身 ★如果是小数,对数进行向上舍入. ◆Ma ...
- MariaDB安装、初始化及常用操作
1.Linux下安装与初始化 #安装 yum install mariadb-server #设置编码 vim /etc/my.cnf [mysqld]character-set-server=utf ...
- CAS Ticket票据:TGT、ST、PGT、PT、PGTIOU
CAS的核心就是其Ticket,及其在Ticket之上的一系列处理操作.CAS的主要票据有TGT.ST.PGT.PGTIOU.PT,其中TGT.ST是CAS1.0协议中就有的票据,PGT.PGTIOU ...