Я пытаюсь задокументировать API, для чего использую swagger-ui-express.
Когда я использую следующее,
app.use('/api-docs/*', swaggerUi.serve, swaggerUi.setUp(swaggerDoc)
или
app.use('/api-docs/*', swaggerUi.serve)
app.get('/api-docs/*', swaggerUi.setup(swaggerDoc))
Все работает идеально, но я хочу, чтобы swaggerDoc создавался динамически на основе попадания по URL-адресу, поэтому я добавляю следующий код. Но теперь HTML-страница никогда не отображается в браузере, но при попадании в Postman она, кажется, имеет то же самое тело ответа, что и при отображении HTML для предыдущего метода.
Поэтому, когда я изменяю приведенный выше код, как показано ниже,
app.use('/api-docs/*', swaggerUi.serve)
app.get('/api-docs/*', function(request, response, next){
console.info(request.url);
var apiNameSplitArray = request.url.split('/')
var apiName = apiNameSplitArray[2]
swaggerDoc = JSONConstructor.JSONConstructorTest(apiName.trim())
next()
})
app.get('/api-docs/*', swaggerUi.setup(swaggerDoc))
Это не работает (не отображается в браузере). Когда я проверял поток управления с помощью точек останова, я заметил следующий порядок выполнения методов
app.useapp.getapp.get




Я также столкнулся с той же проблемой. После глубокого изучения обнаружил, что проблема связана с неправильными заголовками ответов. В моем случае заголовок ответа был установлен на res.setHeader('Content-Type', 'application/json');. После удаления заработало.
Убедитесь, что в заголовке вашего ответа есть Content-Type: text/html; charset=utf-8