如何在没有 运行 服务器的情况下使用 hapi-swaggered

How to use hapi-swaggered without a running server

我有一个可用的 hapi 服务,包括 hapi-swaggered 和 hapi-swaggered-ui。这在很多情况下都很有用,但我想在我的 CI 中添加一个 build 步骤,这将能够获得 hapi-swaggered 生成的 JSON (如果更改,会把它编译成一个 .Net 程序集,然后存储在本地 proget 中)。

我知道如果我真的想要,在我的 build 服务器上,我可以启动我的服务器实例,curllocalhost:3000/swagger,终止服务器,然后继续,但这似乎有点冒险(即,如果我同时有两个 builds 运行 怎么办?)。

有没有人开发出一种直接调用 hapi-swaggered API 来获取原始 JSON 的方法?

好吧,这并没有花太多时间,但我想我找到了一个解决方案。在这种情况下,internals 是我的服务器。它不会 auto-start 如果它是从另一个文件加载的(required'ed),并且公开 compose 方法以使用 hapi 的 Glue.compose 到 assemble 服务.看来以后可以用inject的方法来模拟调用了。

'use strict';

var internals = require('./');

internals.compose(function(err, server) {
    server.inject({ method: 'GET', url: '/swagger' }, function (response) {
        console.log(JSON.stringify(response.result));
        process.exit();
    });
});

如果我对这项技术有任何遗漏,我想听听。