node.js - 如何在 node 中集成 swagger 和 fastify 框架

我在 Node 中使用 restify 框架实现了一个用于测试目的的项目,并实现了一个 GET API。 但我不知道如何将 swagger 与 restify 框架集成。 有很多关于 swagger 与 express 集成的博客.. 我点击了类似

的链接
  • https://www.npmjs.com/package/restify-swagger-jsdoc
  • https://github.com/bvanderlaan/swagger-ui-restify

请帮助我如何集成。

最佳答案

对于走到这一步的每个人,包括我,我假设您使用的是 restify 而不是 express,并且还没有找到简单的答案。我有一个使用 restify 的 API 服务器,在运行我的服务器之前使用 typescript 编程并将文件转换为 javascript,所有这些都在 Docker 容器中。经过大量搜索,我设法解决了我的问题,如下所示:

  1. 安装“swagger-autogen”包。

  2. 使用以下命令创建名为“swagger.ts”的文件:

const swaggerAutogen = require('swagger-autogen')()
const outputFile = '../swagger_output.json'

const endpointsFiles = ['../routes/users.router.ts'] // root file where the route starts.

swaggerAutogen(outputFile, endpointsFiles)
    .then(() => {
        require('./dist/src/app.js') // Your project's root file
})
  1. 转到为您的 API 路由保留的文件(它们具有 GET、POST、PATCH 等功能)——在我的例子中是“../routes/users.router.ts”,并添加评论,喜欢:
// #swagger.path = "/users"
// #swagger.tags = ['User']
// #swagger.description = 'Endpoint to create a user.'
/*
#swagger.responses[201] = {
  schema: { "$ref": "#/definitions/User" },
  description: "User was successfully created." }
*/

注意:要了解有关这些 swagger-autogen 评论标签的更多信息,请参阅: https://github.com/davibaltar/swagger-autogen#swagger-20

  1. 运行以下命令:(在我的例子中,此命令位于 package.json 中的一个脚本中,该脚本在 Dockerfile 中调用):

注意:请记住,如果您不从 typescript 中的脚本自动生成 javascript 文件,则需要完全使用 javascript 而不是 typescript 创建您的结构。注意文件名和扩展名。

node ./dist/src/server/swagger.js // change to your path

当您执行此操作时,将创建一个包含您的应用程序详细信息的 swagger_output.json 文件。

  1. 文件生成后,您需要安装“swagger-ui-restify”包。

  2. 将这些命令放在中间件所在的位置(通常在应用程序启动时):

const swaggerUi = require("swagger-ui-restify")
const swaggerDocument = require("../swagger_output.json")

const swaggerOptions = {
                    explorer: true,
                    baseURL: 'api-docs',
                }

app.get("/api-docs"+'/*', ...swaggerUi.serve)
app.get("/api-docs", swaggerUi.setup(swaggerDocument, swaggerOptions))

现在您的应用程序有一个中间件来查阅自动生成的文档。

https://stackoverflow.com/questions/57203086/

相关文章:

react-native - 如何在切换到 react-navigation 之前预呈现组件?

javascript - `npm install`后出现关于python语法错误的错误?

spring-boot - Spring Boot 可执行 jar 通过 Azure devops

reactjs - 添加具有 Material 表的组件会更改 Material-UI AppBar

angular - Froala 编辑器 formControl 在第二次加载后不更新

python - AWS Lambda——无法为 SpaCy 导入 srsly.ujson.ujso

amazon-web-services - 如何使用 aws Lambda 将多个相关文件作为一个组

reactjs - 使用 React Router V4 时如何防止组件立即卸载

redux - 将 Prop 传递给 redux 初始状态

python - 如何在 Azure Functions API (Python) 中处理 CORS