【问题标题】:Swagger renders in app.use but not in app.getSwagger 在 app.use 中呈现,但不在 app.get 中
【发布时间】:2019-03-12 07:22:17
【问题描述】:

我正在尝试使用 swagger-ui-express 呈现 Swagger 文档。但只有在使用 app.use 时,它​​才会在浏览器中呈现,但在 app.get 中发布时,不会呈现 HTML 页面(空白屏幕),而是在我签入 Postman 时在响应正文中生成 HTML 代码

下面是我的代码,

app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDoc))

上面渲染了所需的 HTML 页面。

app.get('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDoc))

上面生成了 HTML 代码,但没有在浏览器中呈现,是我遗漏了什么吗?

更新:

我使用 generateHTML 方法,但它似乎仍然以同样的方式工作,

app.use('/api-docs-html/BOOKING-CANCELLATION', function(req, res, next) {
    var pathArraySplit = req.originalUrl.split('/');
    var apiNameWithHyphen = pathArraySplit[2].trim()
    var apiNameWithUnderScore = apiNameWithHyphen.replace('-', '_');
    swaggerDocument = JSONConstructor.JSONConstructorTest(apiNameWithUnderScore)
    swaggerHtml = swaggerUi.generateHTML(swaggerDocument, swaggerUiOpts)
    next()
},swaggerUi.serveFiles(swaggerDocument, swaggerUiOpts))
app.get('/api-docs-html/BOOKING-CANCELLATION', (req, res) => { res.send(swaggerHtml) });

【问题讨论】:

    标签: node.js express swagger swagger-ui


    【解决方案1】:

    swaggerUi.serve是一个中间件函数,所以需要和app.use()Refer配合使用

    Middleware (app.use()) 和 Route Handler(app.get()) 处理请求的函数不同,Refer

    next() 中间件内的调用会调用下一个中间件或路由处理程序,具体取决于接下来声明的内容。但是路由处理程序内的next() 调用仅调用下一个路由处理程序。如果接下来有中间件,则跳过它。因此,必须在所有路由处理程序之上声明中间件。

    你可以像这样使用,

    app.use('/api-docs', swaggerUi.serve);
    app.get('/api-docs', swaggerUi.setup(swaggerDocument));
    

    【讨论】:

    • 嗨,你能解释一下这些招摇的中间件吗?我不能让多个路径(/api-docs/*)将不同的文件加载到 swagger-ui.setup() 中,因为即使在路由命中之前总是最后一个被执行。
    • swagger-ui-express 使用 closure 所以它在应用程序启动时生成 html,这就是为什么你得到最后生成的 html。要使用多个文档,这里是solution
    • 非常感谢,我会解释我想要实现的目标,如果我正在寻找正确的方向,请告诉我。 1. 我有多个 API,我想在路径中托管交互式文档(比如 /api-docs/service-name) 2. 因此,根据服务名称,我想在其中填充文档(JSON 规范) swaggerUi.setup().
    • 是的,对,所以您根据服务制作多个文档
    • 是的。但即使在上面的解决方案中,我发现它甚至在知道路由之前就需要 swaggerDocument。我正在寻找类似于我在问题中添加的编辑的内容。即使尝试这样做,即使我只有一条路线而不是另一条路线,也只会查看最后生成的文件,我第一次运行程序时出现的文档只会在每个实例中显示。
    猜你喜欢
    • 1970-01-01
    • 2013-03-14
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多