@fastify/swagger 返回 404

jon*_*now 2 node.js swagger fastify fastify-swagger

我试图让 @Fastify/swagger 处理一个基本的 Fastify 项目,但每次我尝试访问 swagger 页面时,它都只是返回 404。

服务器.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()
Run Code Online (Sandbox Code Playgroud)

访问127.0.0.1/文档

在我的 package.json 中,我有以下依赖项:

  "dependencies": {
    "@fastify/swagger": "^8.1.0",
    "@fastify/view": "^7.1.2",
    "fastify": "^4.9.2",
    "uuid": "^9.0.0"
  }
Run Code Online (Sandbox Code Playgroud)

返回的错误是::“Route GET:/未找到文档”:{“statusCode”:404}

jon*_*now 7

它缺少 @fastify/swagger-ui 包。

此外,加载顺序也很重要。server.js 中的路由需要在要求 swagger 之后出现,如下所示:

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'))
Run Code Online (Sandbox Code Playgroud)

Swagger 在浏览器中显示项目的端点