更改swagger ui的基本路径

更改swagger ui的基本路径,swagger,swagger-ui,Swagger,Swagger Ui,我使用swagger project create为节点服务建立API。我跟着。我还使用了swagger工具来服务于swagger ui 我想动态地将API及其文档的basePath从“/”和“/docs”更改为routingPath和routingPath+“/docs” 我可以更改我的swagger API规范的基本路径,但我不确定如何更改swagger ui的基本路径。我的代码如下所示: 'use strict'; const defaultRoutingPath = '/api/col

我使用swagger project create为节点服务建立API。我跟着。我还使用了swagger工具来服务于swagger ui

我想动态地将API及其文档的basePath从“/”和“/docs”更改为routingPath和routingPath+“/docs”

我可以更改我的swagger API规范的基本路径,但我不确定如何更改swagger ui的基本路径。我的代码如下所示:

'use strict';

const defaultRoutingPath = '/api/collection';
const defaultPort = 3000;

var path = require('path');
var SwaggerExpress = require('swagger-express-mw');
var SwaggerUi = require('swagger-tools/middleware/swagger-ui');
var app = require('express')();
module.exports = app; // for testing

var routingPath = process.env.ROUTING_PATH || defaultRoutingPath;

var config = {
  appRoot: __dirname // required config
};

SwaggerExpress.create(config, function(err, swaggerExpress) {
  if (err) { throw err; }

  swaggerExpress.runner.swagger.basePath = routingPath; // this works

  app.get('/', (req, res) => {
    res.redirect(path.join(routingPath, 'docs'));
  })

  // enable SwaggerUI
  app.use(swaggerExpress.runner.swaggerTools.swaggerUi({
    basePath: routingPath  // this has no effect
  }));

  // install middleware
  swaggerExpress.register(app);

  var port = process.env.PORT || defaultPort;
  app.listen(port);

  if (swaggerExpress.runner.swagger.paths['/hello']) {
    console.log('try this:\ncurl http://127.0.0.1:' + port + path.join(routingPath, '/hello?name=Scott'));
  }
});
如果我运行此服务,我将在

我的文档页面在

我想在

我试图通过将basePath选项传递给swaggerUi构造函数来实现这一点

  // enable SwaggerUI
  app.use(swaggerExpress.runner.swaggerTools.swaggerUi({
    basePath: routingPath  // this has no effect
  }));

那没用。有人知道如何配置swagger ui的基本路径吗?

我基本上找到了以下问题的答案

关键是添加第二个express应用程序(子路径)并使用主应用程序的routingPath。这是密码

'use strict';

const defaultRoutingPath = '/api/collection';
const defaultPort = 80;

var path = require('path');
var SwaggerExpress = require('swagger-express-mw');
var SwaggerUi = require('swagger-tools/middleware/swagger-ui');
var express = require('express');
var app = express();
var subpath = express();
module.exports = app; // for testing

var routingPath = process.env.ROUTING_PATH || defaultRoutingPath;

var config = {
  appRoot: __dirname, // required config
};

SwaggerExpress.create(config, function(err, swaggerExpress) {
  if (err) { throw err; }

  app.use(routingPath, subpath);

  app.get('/', (req, res) => {
    res.redirect(path.join(routingPath, 'docs'));
  })

  swaggerExpress.runner.swagger.basePath = routingPath;

  // enable SwaggerUI
  subpath.use(swaggerExpress.runner.swaggerTools.swaggerUi());

  // install middleware
  swaggerExpress.register(app);

  var port = process.env.PORT || defaultPort;
  app.listen(port);

  if (swaggerExpress.runner.swagger.paths['/health']) {
    console.log('try this:\ncurl http://127.0.0.1:' + port + path.join(routingPath, '/health'));
  }
});
现在,我的文档可在此处找到:
使用spring boot,我可以重新映射

public class CustomResourceMapping extends WebMvcConfigurerAdapter  { 
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addRedirectViewController(
        "/configuration/ui", 
        "/swagger-resources/configuration/ui");
        registry.addRedirectViewController(
        "/configuration/security", 
        "/swagger-resources/configuration/security");
    }
}
但还是有问题,部分单据已经生成, 然后出现了一个javascript错误:

Navigated to http://localhost:8080/swagger-ui.html jquery-1.8.0.min.js:2 
XHR finished loading: GET "http://localhost:8080/configuration/ui".                 jquery-1.8.0.min.js:2 
XHR finished loading: GET "http://localhost:8080/swagger-resources".                jquery-1.8.0.min.js:2 
XHR finished loading: GET "http://localhost:8080/v2/api-docs".                      swagger-ui.min.js:10
swagger-ui.min.js:1 Uncaught TypeError: Cannot read property 'type' of undefined    swagger-ui.min.js:1
    at Object.<anonymous> (swagger-ui.min.js:1)
    at Object.10 (swagger-ui.min.js:2)
    at Object.f [as inverse] (handlebars-2.0.0.js:27)
    at Object.<anonymous> (handlebars-2.0.0.js:27)
    at Object.9 (swagger-ui.min.js:2)
    at Object.f [as inverse] (handlebars-2.0.0.js:27)
    at Object.<anonymous> (handlebars-2.0.0.js:27)
    at Object.main (swagger-ui.min.js:2)
    at e (handlebars-2.0.0.js:27)
    at s.render (swagger-ui.min.js:10)
导航到http://localhost:8080/swagger-ui.html jquery-1.8.0.min.js:2
XHR已完成加载:获取“http://localhost:8080/configuration/ui".                 jquery-1.8.0.min.js:2
XHR已完成加载:获取“http://localhost:8080/swagger-资源”。jquery-1.8.0.min.js:2
XHR已完成加载:获取“http://localhost:8080/v2/api-文件”。招摇过市ui.min.js:10
swagger ui.min.js:1未捕获类型错误:无法读取未定义的swagger ui.min.js:1的属性“type”
反对。(招摇过市ui.min.js:1)
在Object.10(swagger ui.min.js:2)
在Object.f[as inverse](把手-2.0.0.js:27)
反对。(车把-2.0.0.js:27)
在Object.9(swagger ui.min.js:2)
在Object.f[as inverse](把手-2.0.0.js:27)
反对。(车把-2.0.0.js:27)
在Object.main(swagger ui.min.js:2)
在东面(车把-2.0.0.js:27)
在s.render(swagger ui.min.js:10)