zoukankan      html  css  js  c++  java
  • nodejs结合apiblue实现MockServer

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

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

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

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

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

     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,关键代码如下:

     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)一样,试试吧。。对于需求工程师很有帮助

    欢迎关注我的订阅号

  • 相关阅读:
    使用Struts时,JSP中如何取得各个会话中的参数值?
    JUnit —— TestSuite 的使用
    如何修改 Ubuntu 的字符集?
    如何修改 VIM 制表符的空格数?
    最遥远的距离
    二分法求平方根(Python实现)
    Hadoop 学习之路之MapReduce原理
    JDK 1.8源码阅读 TreeMap
    JDK 1.8源码阅读 HashMap
    JDK 1.8源码阅读 HashSet
  • 原文地址:https://www.cnblogs.com/alvin_xp/p/7384892.html
Copyright © 2011-2022 走看看