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

时间:2019-03-12 07:22:17

标签: node.js express swagger swagger-ui

我正在尝试使用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) });

1 个答案:

答案 0 :(得分:0)

swaggerUi.serve是一种中间件功能,因此需要与app.use()Refer

一起使用

中间件(app.use())和路由处理程序(app.get())是用于处理请求Refer

的不同功能 中间件内部的

next()调用将根据下一个声明的那个调用下一​​个中间件或路由处理程序。但是路由处理程序内部的next()调用仅调用下一个路由处理程序。如果接下来有中间件,则将其跳过。因此,必须在所有路由处理程序之上声明中间件。

您可以这样使用

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