Swagger在app.use中呈现,但在app.get中不呈现

问题描述 投票:0回答:1

我正在尝试使用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个回答
0
投票

swaggerUi.serve是一个中间件函数,因此需要与app.use()Refer一起使用

中间件(app.use())和Route Handler(app.get())处理请求的功能不同,Refer

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

您可以像这样使用替代方案,

app.use('/api-docs', swaggerUi.serve);
app.get('/api-docs', swaggerUi.setup(swaggerDocument));
© www.soinside.com 2019 - 2024. All rights reserved.