🔥Knife4j vs Swagger:Node.js 开发者的API文档革命!

🌟 为什么选择 node-knife4j-ui

  1. 填补生态空白 Knife4j 作为 Java 生态标杆级 API 文档工具,官方从未提供 Node.js 支持。本包突破技术栈限制,将 Knife4j 的极致体验首次带入 Node.js 世界:

    • 保留原版智能参数折叠 /多主题切换 /离线导出等核心功能
    • 新增 JWT 自动注入 /权限控制等企业级特性
  2. 性能碾压性优势 | 场景 | Swagger UI | node-knife4j-ui | | ------------------ | ------------ | ------------------ | | 万级接口加载速度 | >5s | <2s ️ | | 内存占用 | 高 | 低(懒加载优化) | | 微服务支持 | 碎片化 | 网关聚合文档 |

🚀 极速体验

npm 地址:www.npmjs.com/package/nod...

GitHub 地址:github.com/766187397/n...

复制代码
npm install node-knife4j-ui

CommonJS

php 复制代码
const { Knife4jDoc } = require('node-knife4j-ui');
const knife4jDoc = new Knife4jDoc(swaggerSpec);
// 或者
const Knife4jDoc = require('node-knife4j-ui').default;
const knife4jDoc = new Knife4jDoc(swaggerSpec);

ES Modules

javascript 复制代码
import Knife4jDoc from 'node-knife4j-ui';
const knife4jDoc = new Knife4jDoc(swaggerSpec);
// 或者
import { Knife4jDoc } from 'node-knife4j-ui';
const knife4jDoc = new Knife4jDoc(swaggerSpec);

快速开始

express 版本使用

个人测试 node 版本 16

javascript 复制代码
import express from 'express';
import swaggerJsdoc from 'swagger-jsdoc';
import swaggerUi from 'swagger-ui-express';
import Knife4jDoc from 'node-knife4j-ui';
​
const app = express();
const PORT = process.env.PORT || 3000;
​
// 中间件
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
​
// Swagger配置选项
const swaggerOptions = {
  definition: {
    openapi: '3.0.0',
    info: {
      title: 'Express测试API',
      version: '1.0.0',
      description: '一个简单的Express API测试服务',
      contact: {
        name: 'API支持',
        email: 'support@example.com'
      }
    },
    servers: [
      {
        url: `http://localhost:${PORT}`,
        description: '开发服务器'
      }
    ]
  },
  apis: ['./app.js'] // 指定包含JSDoc注释的文件
};
​
// 生成Swagger规范
const swaggerSpec = swaggerJsdoc(swaggerOptions);
​
// 提供Swagger UI
app.use('/swagger', swaggerUi.serve, swaggerUi.setup(swaggerSpec));
// 提供 Knife4j 文档
const knife4jDoc = new Knife4jDoc(swaggerSpec);
const knife4jDocPath = knife4jDoc.getKnife4jUiPath();
// 暴露静态文件服务
app.use('/doc', knife4jDoc.serveExpress('/doc'), express.static(knife4jDocPath));
​
/**
 * @swagger
 * /test:
 *   get:
 *     summary: 测试接口
 *     description: 返回简单的问候信息
 *     tags:
 *       - 测试
 *     responses:
 *       200:
 *         description: 成功返回问候信息
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                   example: 你好!
 */
app.get('/test', (req, res) => {
  res.json({ message: '你好!' });
});
​
/**
 * @swagger
 * /getSwaggerSpec:
 *   get:
 *     summary: 获取Swagger规范
 *     description: 返回完整的Swagger规范对象
 *     tags:
 *       - Swagger
 *     responses:
 *       200:
 *         description: 成功返回Swagger规范
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 swaggerSpec:
 *                   type: object
 *                   description: Swagger规范对象
 */
app.get('/getSwaggerSpec', (req, res) => {
  res.json({ swaggerSpec });
});
​
// 启动服务器
app.listen(PORT, () => {
  console.log(`服务器运行在 http://localhost:${PORT}`);
  console.log(`Swagger文档地址: http://localhost:${PORT}/swagger`);
  console.log(`Knife4j文档地址: http://localhost:${PORT}/doc`);
});
​
export default app;

koa 版本使用

个人测试 node 版本 20,koa 静态文件得使用 18+ 才能正常使用

javascript 复制代码
import Koa from 'koa';
import Router from 'koa-router';
import bodyParser from 'koa-bodyparser';
import cors from '@koa/cors';
import swaggerJsdoc from 'swagger-jsdoc';
import koaSwagger from 'koa2-swagger-ui';
import Knife4jDoc from 'node-knife4j-ui';
import serve from 'koa-static';
​
const app = new Koa();
const router = new Router();
const PORT = process.env.PORT || 3001;
​
// 中间件
app.use(cors());
app.use(bodyParser());
​
// Swagger配置选项
const swaggerOptions = {
  definition: {
    openapi: '3.0.0',
    info: {
      title: 'Koa测试API',
      version: '1.0.0',
      description: '一个简单的Koa API测试服务',
      contact: {
        name: 'API支持',
        email: 'support@example.com'
      }
    },
    servers: [
      {
        url: `http://localhost:${PORT}`,
        description: '开发服务器'
      }
    ]
  },
  apis: ['./koa-app.js'] // 指定包含JSDoc注释的文件
};
​
// 生成Swagger规范
const swaggerSpec = swaggerJsdoc(swaggerOptions);
​
// 提供Swagger UI
const swaggerUi = koaSwagger.koaSwagger({
  routePrefix: '/swagger',
  swaggerOptions: {
    spec: swaggerSpec
  },
});
​
// 提供 Knife4j 文档
const knife4jDoc = new Knife4jDoc(swaggerSpec);
const knife4jDocPath = knife4jDoc.getKnife4jUiPath();
app.use(knife4jDoc.serveKoa());
// 暴露静态文件服务
app.use(serve(knife4jDocPath));
​
/**
 * @swagger
 * /test:
 *   get:
 *     summary: 测试接口
 *     description: 返回简单的问候信息
 *     tags:
 *       - 测试
 *     responses:
 *       200:
 *         description: 成功返回问候信息
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 message:
 *                   type: string
 *                   example: 你好!
 */
router.get('/test', (ctx) => {
  ctx.body = { message: '你好!' };
});
​
/**
 * @swagger
 * /getSwaggerSpec:
 *   get:
 *     summary: 获取Swagger规范
 *     description: 返回完整的Swagger规范对象
 *     tags:
 *       - Swagger
 *     responses:
 *       200:
 *         description: 成功返回Swagger规范
 *         content:
 *           application/json:
 *             schema:
 *               type: object
 *               properties:
 *                 swaggerSpec:
 *                   type: object
 *                   description: Swagger规范对象
 */
router.get('/getSwaggerSpec', (ctx) => {
  ctx.body = { swaggerSpec };
});
​
// 应用路由
app.use(router.routes());
app.use(router.allowedMethods());
​
// 应用Swagger UI
app.use(swaggerUi);
​
// 启动服务器
app.listen(PORT, () => {
  console.log(`Koa服务器运行在 http://localhost:${PORT}`);
  console.log(`Swagger文档地址: http://localhost:${PORT}/swagger`);
  console.log(`Knife4j文档地址: http://localhost:${PORT}/doc`);
});
​
export default app;

💡 小贴士:在 GitHub 仓库点击右上角 ★ Star 按钮即可完成加星,整个过程仅需 3 秒!您的每个 Star 都是我前进的动力 🔥

相关推荐
东华帝君3 小时前
react 虚拟滚动列表的实现 —— 固定高度
前端
Larcher3 小时前
n8n 入门笔记:用零代码工作流自动化重塑效率边界
前端·openai
林希_Rachel_傻希希3 小时前
正则表达式捕获组与全局匹配
前端·javascript
前端赵哈哈3 小时前
那个让我熬夜三天的 “小数点”:一次 URL 踩坑记
前端·chrome·http
karshey3 小时前
【vue】NoticeBar:滚动通知栏组件手动实现(内容、速度、循环间隔可配置)
前端·javascript·vue.js
醉方休3 小时前
React 官方推荐使用 Vite
前端·react.js·前端框架
Dontla3 小时前
React惰性初始化函数(Lazy Initializer)(首次渲染时执行一次,只执行一次,应对昂贵初始化逻辑)(传入一个函数、传入函数)
前端·javascript·react.js
lypzcgf4 小时前
FastbuildAI新建套餐-前端代码分析
前端·智能体平台·ai应用平台·agent平台·fastbuildai
南囝coding4 小时前
Claude Code 插件系统来了
前端·后端·程序员