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。

aglio实现将md文档生成HTML接口文档,关键代码如下:
 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的更多相关文章

  1. Nodejs【单机】多进程模式集群

    Nodejs[单机]多进程模式集群实例: 1.安装:npm install -s cluster 2.服务代码: var debug = require('debug'); var express = ...

  2. NodeJs之OS

    OS Node.js提供了一些基本的底层操作系统的模块OS. API var os = require('os'); console.log('[arch] 操作系统CPU架构'+os.arch()) ...

  3. NodeJs之Path

    Path模块 NodeJs提供的Path模块,使得我们可以对文件路径进行简单的操作. API var path = require('path'); var path_str = '\\Users\\ ...

  4. NodeJs之调试

    关于调试 当我们只专注于前端的时候,我们习惯性F12,这会给我们带来安全与舒心的感觉. 但是当我们使用NodeJs来开发后台的时候,我想噩梦来了. 但是也别泰国担心,NodeJs的调试是很不方便!这是 ...

  5. NodeJs在Linux下使用的各种问题

    环境:ubuntu16.04 ubuntu中安装NodeJs 通过apt-get命令安装后发现只能使用nodejs,而没有node命令 如果想避免这种情况请看下面连接的这种安装方式: 拓展见:Linu ...

  6. NodeJs之child_process

    一.child_process child_process是NodeJs的重要模块.帮助我们创建多进程任务,更好的利用了计算机的多核性能. 当然也支持线程间的通信. 二.child_process的几 ...

  7. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  8. 图片访问实时处理的实现(nodejs和php)

    我在访问时光网.网易云音乐等网站时,发现将它们页面中的一些图片URL修改一下就可以得到不同尺寸的图片,于是思考了其实现方案,我的思路是:URL Rewrite + 实时处理 + 缓存,对用户请求的UR ...

  9. nodejs进阶(4)—读取图片到页面

    我们先实现从指定路径读取图片然后输出到页面的功能. 先准备一张图片imgs/dog.jpg. file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明'binary'.(file. ...

随机推荐

  1. 时间控件My97简单用法

    my97的用法很是简单,项目中用到,查了资料才找到的,简单使用,记一下,方便查阅. 1.添加依赖. <script language="javascript" type=&q ...

  2. 解决Linux下IDEA无法使用ibus输入法的问题和tip乱码

    一:可以先按网上的配置/etc/profile里的输入法的一些参数,我是先配置了这些参数的,但是输入法还是没用,后来一直没管它了,今天用了一些方式可以了但不敢保证不需要先配置那些参数: 二:情况:开启 ...

  3. 学以致用二---配置Centos7.2 基本环境

    Centos 7 虚拟机安装好后,接下来该配置环境了. 一.查看系统版本 cat /etc/redhat-release 二.修改主机名 /etc/hostname 注意,hostname里的内容为l ...

  4. 图片轮滚形式A

    思想解读: 一共有5幅图片,初始时只显示一幅,其余四幅隐藏.然后使用trigger设置右下角的点击事件,根据点击的索引显示某幅图片.原理不算复杂. 结论: trigger的使用,模拟点击 层淡入淡出函 ...

  5. MIT molecular Biology 笔记10 翻译

    视频  https://www.bilibili.com/video/av7973580/ 教材 Molecular biology of the gene 7th edition  J.D. Wat ...

  6. 第四章-shceme和数据类型优化

    选择数据类型的原则: 1.更小通常更好.因为占用更少磁盘,内存和cpu缓存.但是要确保没有低估,因为进行alter时,是很耗时和头疼的操作.所以当无法确定数据类型的时候,选择不会超过范围的最小类型. ...

  7. UniGUI的 TUniPageControl控件动态拖动tabsheet的实现方法

    https://blog.csdn.net/shuiying/article/details/54932518 实现可以用鼠标动态拖动tabsheet,共三个步骤: 1.在ServerModule中, ...

  8. 电子书推荐--《Python灰帽子》,python黑客编程

    点此在线阅读 <Python灰帽子>是由知名安全机构Immunity Inc的资深黑帽Justin Seitz主笔撰写的一本关于编程语言Python如何被广泛应用于黑客与逆向工程领域的书籍 ...

  9. 几款移动跨平台App开发框架比较

    整理目前流行的跨平台WebApp开发技术的特点,仅供参考. 每个框架几乎都包含以下特性: 使用 HTML5 + CSS + JavaScript 开发 跨平台重用代码 丰富的UI库 提供访问设备原生A ...

  10. DotNetCore依赖注入实现批量注入

    文章转载自平娃子(QQ:273206491):http://os.pingwazi.cn/resource/batchinjectservice 一.依赖注入 通过依赖注入,可以实现接口与实现类的松耦 ...