vaflya
@vaflya
Ничего личного, это всего лишь хобби.

Как правильно подключить Swagger для fastify на node.js?

Добрый день, подскажите пожалуйста: пытаюсь подключит swagger для Rest API на fastify, но ничего не получается:

index.ts
import * as SwaggerPlugin from 'fastify-swagger'

const server = fastify ({
        logger: true
})

// Документация API
server.register( SwaggerPlugin, require('./config/swagger'))

server.listen (Number.parseInt(process.env.PORT) || 3000, '0.0.0.0', (err, address) => {
       if (err) throw err

       server.log.info(`Server listening on ${address}`)
       server.swagger()
})


swagger.ts
exports.options = {
    routePrefix: '/doc',
    exposeRoute: true,
    swagger: {
      info: {
        title: 'Fastify API',
        description: 'Building a blazing fast REST API with Node.js, MongoDB, Fastify and Swagger',
        version: '1.0.0'
      },
      externalDocs: {
        url: 'https://swagger.io',
        description: 'Find more info here'
      },
      host: 'localhost:3000',
      schemes: ['http'],
      consumes: ['application/json'],
      produces: ['application/json']
  }
}


Вывожу в консоль server.swagger() Он отображает правильно все собранные роуты
Вывожу в консоль fastify.printRoutes() В нем не содержится роут на страницу swagger с документацией API

Сутки уже ничего не получается, посмотрел все примеры на github, ничего дополнительно не нужно. localhost:3000/doc возвращает 404
  • Вопрос задан
  • 444 просмотра
Решения вопроса 2
@Nc_Soft
У меня всё работает с таким же кодом
const fastify = require('fastify');
const SwaggerPlugin = require('fastify-swagger');

const server = fastify({
  logger: true
});

server.register(SwaggerPlugin, {
  routePrefix: '/doc',
  exposeRoute: true,
  swagger: {
    info: {
      title: 'Fastify API',
      description: 'Building a blazing fast REST API with Node.js, MongoDB, Fastify and Swagger',
      version: '1.0.0'
    },
    externalDocs: {
      url: 'https://swagger.io',
      description: 'Find more info here'
    },
    host: 'localhost:3000',
    schemes: ['http'],
    consumes: ['application/json'],
    produces: ['application/json']
  }
});

server.listen(Number.parseInt(process.env.PORT) || 3000, '0.0.0.0', (err, address) => {
  if (err) throw err;

  server.log.info(`Server listening on ${address}`);
  server.swagger()
});


5e0e221b518a1620494250.png
Ответ написан
vaflya
@vaflya Автор вопроса
Ничего личного, это всего лишь хобби.
Суть была в импортируемом файле настроек для Swagger

подставил настройки напрямую
server.register( SwaggerPlugin, {
        routePrefix: '/doc',
        exposeRoute: true,
        swagger: {
          info: {
            title: 'Fastify API',
            description: 'Building a blazing fast REST API with Node.js, MongoDB, Fastify and Swagger',
            version: '1.0.0'
          },
          externalDocs: {
            url: 'https://swagger.io',
            description: 'Find more info here'
          },
          host: 'localhost:3000',
          schemes: ['http'],
          consumes: ['application/json'],
          produces: ['application/json']
        }
    })


все работает

p.s:
Swagger должен быть подключен до определения роутов или подключения плагинов с роутами
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы