【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; // 導出路由實例

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/67489.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67489.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67489.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Maven的單元測試

1. 單元測試的基本概念 單元測試(Unit Testing) 是一種軟件測試方法,專注于測試程序中的最小可測試單元——通常是單個類或方法。通過單元測試,可以確保每個模塊按預期工作,從而提高代碼的質量和可靠性。 2.安裝和配…

論文閱讀(八):結構方程模型用于研究數量遺傳學中的因果表型網絡

1.論文鏈接:Structural Equation Models for Studying Causal Phenotype Networks in Quantitative Genetics 摘要: 表型性狀可能在它們之間發揮因果作用。例如,農業物種的高產可能會增加某些疾病的易感性,相反,疾病的…

LeetCode | 不同路徑

一個機器人位于一個 m x n 網格的左上角 (起始點在下圖中標記為 “Start” )。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角(在下圖中標記為 “Finish” )。 問總共有多少條不同的路徑? 示例 1…

C++的類Class

文章目錄 一、C的struct和C的類的區別二、關于OOP三、舉例:一個商品類CGoods四、構造函數和析構函數1、定義一個順序棧2、用構造和析構代替s.init(5);和s.release();3、在不同內存區域構造對象4、深拷貝和淺拷貝5、構造函數和深拷貝的簡單應用6、構造函數的初始化列…

Excel 技巧21 - Excel中整理美化數據實例,Ctrl+T 超級表格(★★★)

本文講Excel中如何整理美化數據的實例,以及CtrlT 超級表格的常用功能。 目錄 1,Excel中整理美化數據 1-1,設置間隔行顏色 1-2,給總銷量列設置數據條 1-3,根據總銷量設置排序 1-4,加一個銷售趨勢列 2&…

Leetcode 131 分割回文串(純DFS)

131. 分割回文串https://leetcode.cn/problems/palindrome-partitioning/https://leetcode.cn/problems/palindrome-partitioning/ 給你一個字符串 s,請你將 s 分割成一些子串,使每個子串都是 回文串 。返回 s 所有可能的分割方案。 示例 1&#xff1a…

電梯系統的UML文檔14

對于 HallButtonControl,我們有二個狀態: "門廳燈開 " 和 " 門廳燈關"。 從給出的初始信息,初始的狀態應該是"門廳燈關"。行為定義: " 當 HallCall[f,d]是真,則指令 HallLight[f&…

關于安卓greendao打包時報錯問題修復

背景 項目在使用greendao的時候,debug安裝沒有問題,一到打包簽名就報了。 環境 win10 jdk17 gradle8 項目依賴情況 博主的greendao是一個獨立的module項目,項目目前只適配了java,不支持Kotlin。然后被外部集成。greendao版本…

SQL server 數據庫使用整理

標題:SQL server 數據庫使用整理 1.字符串表名多次查詢 2.讀取SQL中Json字段中的值:JSON_VALUE(最新版本支持,屬性名大小寫敏感) 1.字符串表名多次查詢 SELECT ROW_NUMBER() OVER (ORDER BY value ASC) rowid,value…

一文講解Java中的BIO、NIO、AIO之間的區別

BIO、NIO、AIO是Java中常見的三種IO模型 BIO:采用阻塞式I/O模型,線程在執行I/O操作時被阻塞,無法處理其他任務,適用于連接數比較少的場景;NIO:采用非阻塞 I/O 模型,線程在等待 I/O 時可執行其…

分布式系統架構怎么搭建?

分布式系統架構 互聯網企業的業務飛速發展,促使系統架構不斷變化。總體來說,系統架構大致經歷了單體應用架構—垂直應用架構—分布式架構—SOA架構—微服務架構的演變,很多互聯網企業的系統架構已經向服務化網格(Service Mesh&am…

Effective C++ 規則50:了解 new 和 delete 的合理替換時機

1、背景 在 C 中,new 和 delete 是動態分配內存的核心操作符。然而,直接使用它們有時會增加程序的復雜性,甚至導致內存泄漏和其他問題。因此,了解何時替換 new 和 delete 并選擇更適合的內存管理策略,是編寫高效、健壯…

Effective Python:(10)

Effective Python提供90條新穎的Python3編程技巧,可以讓我們寫程序更加靈活,代碼更加整潔而易于維護,這對于商業化系統代碼的重要性不言而喻。 前面兩條主要介紹切片的實用好玩的用法,這一條里反而建議不用切片,這是什…

高效學習方法分享

高效學習方法分享 引言 在信息高速發展的今天,學習已經成為每個人不可或缺的一部分。你是否曾感到學習的疲憊,信息的爆炸讓你無從下手?今天,我們將探討幾種高效的學習方法,幫助你從中找到適合自己的學習之道。關于學…

數據庫備份、主從、集群等配置

數據庫備份、主從、集群等配置 1 MySQL1.1 docker安裝MySQL1.2 主從復制1.2.1 主節點配置1.2.2 從節點配置1.2.3 創建用于主從同步的用戶1.2.4 開啟主從同步1.2.4 主從同步驗證 1.3 主從切換1.3.1 主節點設置只讀(在192.168.1.151上操作)1.3.2 檢查主從數…

代碼隨想錄_棧與隊列

棧與隊列 232.用棧實現隊列 232. 用棧實現隊列 使用棧實現隊列的下列操作: push(x) – 將一個元素放入隊列的尾部。 pop() – 從隊列首部移除元素。 peek() – 返回隊列首部的元素。 empty() – 返回隊列是否為空。 思路: 定義兩個棧: 入隊棧, 出隊棧, 控制出入…

AJAX綜合案例——圖書管理

黑馬程序員視頻地址: AJAX-Day02-10.案例_圖書管理AJAX-Day02-10.案例_圖書管理_總結_V1.0是黑馬程序員前端AJAX入門到實戰全套教程,包含學前端框架必會的(ajaxnode.jswebpackgit),一套全覆蓋的第25集視頻&#xff0c…

【編譯原理實驗二】——自動機實驗:NFA轉DFA并最小化

本篇適用于ZZU的編譯原理課程實驗二——自動機實驗:NFA轉DFA并最小化,包含了實驗代碼和實驗報告的內容,讀者可根據需要參考完成自己的程序設計。 如果是ZZU的學弟學妹看到這篇,那么恭喜你,你來對地方啦! 如…

【redis進階】分布式鎖

目錄 一、什么是分布式鎖 二、分布式鎖的基礎實現 三、引入過期時間 四、引入校驗 id 五、引入lua 六、引入 watch dog (看門狗) 七、引入 Redlock 算法 八、其他功能 redis學習🥳 一、什么是分布式鎖 在一個分布式的系統中,也會涉及到多個節點訪問同一…

wordpress每隔24小時 隨機推薦一個指定分類下的置頂內容。

在WordPress中實現每隔24小時隨機推薦一個指定分類下的置頂內容,可以通過以下步驟實現: 1. 創建自定義函數 在主題的functions.php文件中添加以下代碼,用于創建一個定時任務,每隔24小時隨機選擇一個置頂文章并存儲到選項中&…