欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 【Node.js】Koa2 整合接口文档

【Node.js】Koa2 整合接口文档

2025/2/4 7:56:30 来源:https://blog.csdn.net/XiugongHao/article/details/145401155  浏览:    关键词:【Node.js】Koa2 整合接口文档

部分学习来源:https://blog.csdn.net/qq_38734862/article/details/107715579

依赖

// koa2-swagger-ui UI视图组件  swagger-jsdoc 识别写的 /***/ 转 json
npm install koa2-swagger-ui swagger-jsdoc --save

配置

在这里插入图片描述

config\swaggerConfig.js

const Router = require('@koa/router'); // 引入 Router 类
const path = require('node:path');
const swaggerJSDoc = require('swagger-jsdoc');const swaggerDefinition = {info: {description:'This is a sample server Koa2 server.  You can find out more about     Swagger at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).      For this sample, you can use the api key `special-key` to test the authorization     filters.',version: '1.0.0',title: 'Koa2_server Swagger',},host: 'localhost:4000',basePath: '/', // Base path (optional), host/basePathschemes: ['http'],
};const options = {swaggerDefinition,// 写有注解的router的存放地址(当你新增swagger时文档里没显示出来的话那么就是这边地址没有加进去)apis: ['./routes/*.js'] // 注意这里的路径!!!
};const swaggerSpec = swaggerJSDoc(options);// 创建一个新的 Router 实例
const router = new Router();// 通过路由获取生成的注解文件
router.get('/swagger.json', async ctx => {ctx.set('Content-Type', 'application/json');ctx.body = swaggerSpec;
});module.exports = router;

入口文件 app.js 注册:

const Koa = require('koa');
const app = new Koa();
const {koaSwagger} = require("koa2-swagger-ui");const attractionRoute = require('./routes/attractionsRoute'); // 添加: 引入景点路由
const swaggerConfig = require('./config/swaggerConfig');// 使用 Swagger 路由
app.use(swaggerConfig.routes()).use(swaggerConfig.allowedMethods());// 使用景点路由
app.use(attractionRoute.routes()).use(attractionRoute.allowedMethods());
// 使用 Swagger UI
app.use(koaSwagger({routePrefix: '/swagger', // host at /swagger instead of default /docsswaggerOptions: {url: '/swagger.json' // example path to json}})
);app.listen(4000, () => {console.log('Server is running on port 4000');
});

配置完后打开 http://localhost:4000/swagger 可以得到文档可视化界面,http://localhost:4000/swagger.json 可以看到 swagger 文档配置。

在这里插入图片描述

routes 的 swagger 文档注释规范可以参考OpenAPI规范,比如 OpenAPI规范示例。

我的 attrtionsRoute.js 示例:

const Router = require('@koa/router'); // 添加: 引入路由模块
const router = new Router({ prefix: '/api/scenic' }); // 修改: 创建路由实例,并设置前缀const attractionsController = require('../controllers/attractionsController');// 获取景点列表
// 生成swagger注释
/*** @swagger* /api/scenic/list:*   get:*     summary: 获取景点列表*     responses:*       200:*         description: 景点列表*/
router.get('/list', attractionsController.getAttractionsList);// 获取景点详情
// 生成swagger注释
/*** @swagger* /api/scenic/{id}:*   get:*     summary: 获取景点详情*     parameters:*       - in: path*         name: id*         required: true*         schema:*           type: string*         description: 景点ID*     responses:*       200:*         description: 景点详情*/
router.get('/:id', attractionsController.getAttractionById);// 添加新景点
// 生成swagger注释
/*** @swagger* /api/scenic/add:*   post:*     summary: 添加新景点*     requestBody:*       required: true*       content:*         application/json:*           schema:*             type: object*             properties:*               name:*                 type: string*               description:*                 type: string*     responses:*       201:*         description: 景点添加成功*/
router.post('/add', attractionsController.addAttraction);// 更新景点信息
// 生成swagger注释
/*** @swagger* /api/scenic/update/{id}:*   put:*     summary: 更新景点信息*     parameters:*       - in: path*         name: id*         required: true*         schema:*           type: string*         description: 景点ID*     requestBody:*       required: true*       content:*         application/json:*           schema:*             type: object*             properties:*               name:*                 type: string*               description:*                 type: string*     responses:*       200:*         description: 景点更新成功*/
router.put('/update/:id', attractionsController.updateAttraction);// 删除景点
// 生成swagger注释
/*** @swagger* /api/scenic/delete/{id}:*   delete:*     summary: 删除景点*     parameters:*       - in: path*         name: id*         required: true*         schema:*           type: string*         description: 景点ID*     responses:*       200:*         description: 景点删除成功*/
router.delete('/delete/:id', attractionsController.deleteAttraction);// 添加评论
// 生成swagger注释
/*** @swagger* /api/scenic/comment/{id}:*   post:*     summary: 添加评论*     parameters:*       - in: path*         name: id*         required: true*         schema:*           type: string*         description: 景点ID*     requestBody:*       required: true*       content:*         application/json:*           schema:*             type: object*             properties:*               comment:*                 type: string*     responses:*       201:*         description: 评论添加成功*/
router.post('/comment/:id', attractionsController.addComment);// 获取景点评论
// 生成swagger注释
/*** @swagger* /api/scenic/comments/{id}:*   get:*     summary: 获取景点评论*     parameters:*       - in: path*         name: id*         required: true*         schema:*           type: string*         description: 景点ID*     responses:*       200:*         description: 景点评论列表*/
router.get('/comments/:id', attractionsController.getComments);module.exports = router; // 导出路由实例

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com