I'm trying to get @Fastify/swagger working on a basic Fastify project, but everytime I try to get to the swagger page it just returns as a 404.
server.js:
const fastify = require('fastify')({logger: true})
const PORT = 3000
fastify.register(require('./routes/items'));
fastify.register(require('@fastify/swagger'), {
routePrefix: '/documentation',
exposeRoute: true,
swagger: {
info: {
title: { title: 'test'}
}
}
})
const start = async() => {
try {
await fastify.listen(PORT)
fastify.swagger()
} catch (error) {
fastify.log.error(error)
process.exit(1)
}
}
start()
Visiting 127.0.0.1/documentation
In my package.json I have the following dependencies:
"dependencies": {
"@fastify/swagger": "^8.1.0",
"@fastify/view": "^7.1.2",
"fastify": "^4.9.2",
"uuid": "^9.0.0"
}
The errors returned are: :"Route GET:/documentation not found" :{"statusCode":404}
It was missing the @fastify/swagger-ui package.
Additionally the load order is important. Routes in the server.js need to come after requiring swagger, like so:
fastify.register(require('@fastify/swagger'), {})
fastify.register(require('@fastify/swagger-ui'), {
routePrefix: '/docs',
uiConfig: {
docExpansion: 'full',
deepLinking: false
},
uiHooks: {
onRequest: function (request, reply, next) { next() },
preHandler: function (request, reply, next) { next() }
},
staticCSP: true,
transformStaticCSP: (header) => header,
transformSpecification: (swaggerObject, request, reply) => { return swaggerObject },
transformSpecificationClone: true
})
fastify.register(require('./routes/item'))