Swagger 文档不适用于 Express 服务器

问题描述 投票:0回答:2

所以基本上我有一个

Express
API,我一直在研究它,最近我想到了为其实现一个文档。我选择 Swagger 和 JSDoc 来执行此操作,因为它既快速又简单。但是文档将不起作用。这是到目前为止我的实现方式。

docs.ts:

import swaggerJSDoc, { Options } from "swagger-jsdoc";

const swaggerOptions: Options = {
   definition: {
      info: {
         title: "Project Nonya Documentation.",
         description: "Documentation for the Project Nonya API",
         contact: {
            name: "Joe Mama",
         },
         version: "6.9.0",
      },
   },
   apis: ["./routes/*.routes.ts"],
};

export const swaggerDocs = swaggerJSDoc(swaggerOptions);

路由器.ts:

...

import swaggerUi from "swagger-ui-express";
import { swaggerDocs } from "./docs";

...

app.use("/api/documentation", swaggerUi.serve, swaggerUi.setup(swaggerDocs));

...

当我到达文档端点时,文档确实出现了,但它一直显示

No Operations defined in spec!
。这是路径文件夹中的文件之一。

测试.routes.ts:

import express, { Router } from "express";
import { testing} from "../controllers/testing/testing.controller";

const router: Router = express.Router();

/**
 * @swagger
 * /:
 *   get:
 *     description: Why you no work?
 *     responses:
 *       200:
 *         description: Returns nothing cause this shit won't work.
 */
router.post("/testing/:id", testing);

export default router;

我做错了什么?我想不通。目录如下:

src/docs.ts
src/router.ts
src/routes/testing.router.ts

附带问题

由于我使用的是 TypeScript,显然我必须将代码编译为 JavaScript。但是,在

docs.ts
中的 apis 数组中,我用
*.routes.ts
指定文件。我是否必须将其更改为
*routes.js

谢谢您!

javascript typescript express swagger jsdoc
2个回答
0
投票

发现这个 Github 问题可以解决我的问题。

https://github.com/Surnet/swagger-jsdoc/issues/150


0
投票

我遇到了类似的问题。虽然我的问题是特定于 javascript 而不是 typescript。该错误是由于我定义的路由路径而发生的。

const options = {
  swaggerDefinition,
  apis: ["./routes/*.js"],
};

我的问题发生是因为通配符路径与我的路线不匹配。

为了解决这个问题,我指定了确切的路径。

const options = {
  swaggerDefinition,
  apis: ["./routes/users/userRoutes.js"],
};
© www.soinside.com 2019 - 2024. All rights reserved.