nodejs结合apiblue实现MockServer

apiblue功能很强大,里面支持不少插件,这些插件可以为restfulAPI提供接口文档自动生成,甚至Mockserver的功能,固然,好多插件仍是有不少坑的。下面用apiblue实现下面的业务需求:html

一、用户上传.md文件,自动启动mock动做,生成一套api测试服务git

二、根据.md文档自动生成html接口文档github

三、当.md文档发生crud操做的时候,文档和mockServer自动更新express

 

drakov将.md文档中的接口自动生成Mockserver,关键代码以下:api

 1 var drakov = require('drakov');
 2 var aglio = require('./aglio');
 3 var path = require('path');
 4 var sourceFiles = path.resolve(__dirname, '../mfiles/**.md');
 5 var fs = require("fs");
 6 var argv = {
 7   sourceFiles: sourceFiles,//md文档存储地
 8   serverPort: 4007,
 9   disableCORS: false,//false容许跨域访问
10   debugMode: true,
11   discover: true,
12   public: true,//true容许外围ip访问api,false只能本地访问
13   watch: true,
14   method: ['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS']
15 };
16 module.exports = function (mdFileUrl) {
17   try {
18     if ((mdFileUrl && typeof (mdFileUrl) === "string" && mdFileUrl.indexOf(".md") > -1) || mdFileUrl == '') {
19       drakov.stop(function () {
20         // stopped Drakov
21         console.log('drakov Finished');
22       });
23 
24       drakov.run(argv, function () {
25         console.log('drakov start');
26       });
27       if (mdFileUrl) {
28         aglio(mdFileUrl);
29       }
30     }
31 
32   } catch (e) { } finally { }
33 }

https://github.com/Aconex/drakov 这是drakov  git地址,上面介绍了使用中间件的方式实现drakov与express结合,当时有问题,drakov的watch功能失效,md文档发生改变,没法更新apiServer。跨域

aglio实现将md文档生成HTML接口文档,关键代码以下:
 1 var aglio = require('aglio');
 2 var path = require('path');
 3 var fs = require('fs');
 4 var aglio_options = {
 5   themeTemplate: 'default',//aglio样式
 6   locals: {
 7     myVariable: 125
 8   }
 9 };
10 module.exports = function(mdFileUrl) {
11   if (mdFileUrl) {
12     var targetUrl = mdFileUrl.replace("/mfiles/", "/mock-ui/").replace(".md", ".html");
13     aglio.renderFile(mdFileUrl, targetUrl, aglio_options, function(err, warnings) {
14       if (err)
15         return console.log(err);
16       }
17     );
18   }
19 
20 }

watch监控存放md文件的文件夹,实时通知drakov和aligo,关键代码以下:restful

 1 var watch = require('watch');
 2 var drakov = require('./drakov');
 3 
 4 module.exports = function (watchDir) {
 5   try {
 6     var filepath;
 7     watch.watchTree(watchDir, function (f, curr, prev) {
 8       if (typeof f == "object" && prev === null && curr === null) {
 9         // Finished walking the tree
10         drakov('')
11       } else if (prev === null) {
12         // f is a new file
13         if (filepath != f) {
14           drakov(f, 'new');
15           filepath = f;
16         }
17       } else if (curr.nlink === 0) {
18         if (filepath != f) {
19           // f was removed
20           drakov(f)
21         }
22       } else {
23         // f was changed
24         drakov(f)
25       }
26     })
27     console.log("watching file...");
28 
29   } catch (e) {
30     console.log(e.message);
31   } finally { }
32 
33 }

ok 根据这三个js,你就能够建一个MockServer,就像 easymock(www.easy-mock.com)同样,试试吧。。对于需求工程师颇有帮助测试

 

欢迎关注个人订阅号ui

相关文章
相关标签/搜索