从nodejs / express项目中获得swagger-ui

时间:2014-12-31 18:16:07

标签: node.js express swagger swagger-ui

我想使用swagger-ui dist'原样'......几乎就是这样。

从github(2.0.24)下载最新版本并将其粘贴在我的应用程序的文件夹中。然后我用express表示静态服务它:

app.use('/swagger', express.static('./node_modules/swagger-ui/dist'));

我去的时候按预期工作:

https://mydomain.com/swagger

但是我想动态地将url字段填充到我的swagger json中。 IE我可以部署到不同的域:

https://mydomain.com/api-docs
https://otherdomain.com/api-docs

当我访问时:

https://mydomain.com/swagger
https://otherdomain.com/swagger

我想动态设置网址。

这可能吗?

3 个答案:

答案 0 :(得分:2)

假设/ api-docs(或swagger.json)始终位于同一路径上,且只有域发生更改,您可以将SwaggerUi对象的url参数设置为"/path/to/api-docs"或{ {1}}而不是完整的网址。这将使UI加载该路径相对于托管UI的域。

作为参考,我也将保留原始答案,因为在某些情况下它可能会有用。

您可以使用"/path/to/swagger.json"参数设置用户界面应加载的网址。

也就是说,如果您在url下托管,则可以使用https://mydomain.com/swaggerhttps://mydomain.com/swagger?url=https://mydomain.com/api-docs指向不同的位置。

但是,据我所知,此功能仅适用于当前的alpha版本(应该足够稳定),而不适用于您使用的2.0.24(尽管值得测试)。

答案 1 :(得分:0)

另一种方法是使用位于swagger工具中的swagger-ui中间件。

let swaggerUi = require('../node_modules/swagger-tools/middleware/swagger-ui');
app.use(swaggerUi(config.swagger));

变量config.swagger包含swagger.yamlswagger.json。我有我的设置

  let config = {
      appRoot: __dirname,
      swagger: require('./api/swagger/swagger.js')
  };

注意:我使用的是require('swagger-express-mw')模块

答案 2 :(得分:0)

你可以在swagger-ui的index.html文件中尝试这个...它对我有用。

if (url && url.length > 1) {
   url = decodeURIComponent(url[1]);
} else {
   url = window.location.origin + "/path/to/swagger.json";
}