Swagger отображает в app.use, но не в app.get - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь визуализировать документ Swagger, используя swagger-ui-express. Но только при использовании app.use он отображается в браузере, но при публикации в app.get HTML-страница не отображается (пустой экран), но HTML-код генерируется в теле ответа при проверке в Postman

Ниже мой код,

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 голосов
/ 12 марта 2019

swaggerUi.serve - это функция промежуточного программного обеспечения, поэтому ее необходимо использовать с app.use(), См.

Промежуточное программное обеспечение (app.use()) и Route Handler (app.get()) не являютсята же функция для обработки запроса: См.

next() вызов внутри промежуточного программного обеспечения вызывает следующее промежуточное программное обеспечение или обработчик маршрута в зависимости от того, что объявлено следующим.Но next() вызов внутри обработчика маршрута вызывает только следующий обработчик маршрута.Если рядом есть промежуточное ПО, оно пропускается.Поэтому промежуточные программы должны быть объявлены выше всех обработчиков маршрутов.

Вы можете использовать это как альтернативу,

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