Skip to content

xxxily/HTMLSuite

Repository files navigation

HTML处理和发布系统

一个功能完整的HTML处理和发布系统,提供HTML压缩、格式化、脚本注入和文件管理功能。

功能特性

核心功能

  • HTML处理: 支持HTML压缩和格式化
  • 脚本注入: 可向HTML中注入外部脚本或内联脚本
  • 文件发布: 支持将处理后的HTML发布到指定目录
  • 文件管理: 提供完整的文件CRUD操作
  • 智能命名: 自动生成唯一文件名,支持自定义文件名

技术特性

  • RESTful API: 标准的REST接口设计
  • API认证: 可选的Token认证机制,支持多token和频率限制
  • 参数验证: 完整的请求参数验证
  • 错误处理: 统一的错误处理机制
  • 日志记录: 详细的操作日志和安全审计
  • API文档: 自动生成的Swagger文档
  • 安全性: 集成Helmet安全中间件和访问控制

快速开始

安装依赖

npm install

启动服务

# 开发模式
npm run dev

# 生产模式
npm start

访问API文档

启动服务后,访问 http://localhost:3000/api/docs 查看完整的API文档。

API接口

1. 处理HTML并可选发布

POST /api/html/process

请求示例:

{
  "html": "<!DOCTYPE html><html><head><title>Test</title></head><body><h1>Hello World</h1></body></html>",
  "options": {
    "minify": true,
    "scripts": [
      "https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js",
      {
        "src": "https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js",
        "integrity": "sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p",
        "crossorigin": "anonymous"
      }
    ],
    "publish": true,
    "filename": "my-page.html"
  }
}

2. 获取文件列表

GET /api/html/files?page=1&limit=20&sortBy=modifiedAt&sortOrder=desc

3. 获取文件内容

GET /api/html/files/{filename}

4. 更新文件

PUT /api/html/files/{filename}

5. 删除文件

DELETE /api/html/files/{filename}

配置说明

环境变量

.env 文件中配置以下参数:

# 服务器配置
PORT=3000
NODE_ENV=development

# 发布目录配置
PUBLISH_DIR=./public/published

# 日志配置
LOG_LEVEL=info
LOG_FILE=./logs/app.log

# API配置
API_PREFIX=/api

# API认证配置(可选)
# 设置后需要在请求头中携带 Authorization: Bearer <token>
API_TOKEN=your-api-token-here
API_RATE_LIMIT=100

目录结构

├── src/
│   ├── config/          # 配置文件
│   ├── controllers/     # 控制器
│   ├── middleware/      # 中间件
│   ├── routes/          # 路由
│   ├── services/        # 业务逻辑
│   └── utils/           # 工具函数
├── public/
│   └── published/       # 发布的HTML文件
├── logs/                # 日志文件
├── tests/               # 测试文件
└── server.js            # 入口文件

使用示例

1. 压缩HTML

const response = await fetch('/api/html/process', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    html: '<html><body>  <h1>Hello World</h1>  </body></html>',
    options: { minify: true }
  })
});

2. 格式化HTML

const response = await fetch('/api/html/process', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    html: '<html><body><h1>Hello World</h1></body></html>',
    options: { beautify: true }
  })
});

3. 注入脚本并发布

const response = await fetch('/api/html/process', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    html: '<!DOCTYPE html><html><head><title>Test</title></head><body><h1>Hello</h1></body></html>',
    options: {
      scripts: [
        'https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js'
      ],
      publish: true,
      filename: 'test-page.html'
    }
  })
});

4. 使用API认证

// 生成API Token
const tokenResponse = await fetch('/api/auth/generate', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ length: 32 })
});
const { token } = (await tokenResponse.json()).data;

// 使用Token访问API
const response = await fetch('/api/html/process', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${token}`,
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    html: '<html><body><h1>认证访问</h1></body></html>',
    options: { minify: true }
  })
});

开发指南

添加新功能

  1. src/services/ 中添加业务逻辑
  2. src/controllers/ 中添加控制器
  3. src/routes/ 中添加路由
  4. src/middleware/ 中添加验证中间件
  5. 更新API文档注释

测试

# 运行测试
npm test

# 监听模式
npm run test:watch

# 生成覆盖率报告
npm run test:coverage

部署

Docker部署

FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

PM2部署

npm install -g pm2
pm2 start server.js --name html-processor

许可证

MIT License

About

一个功能完整的HTML处理和发布系统,提供HTML压缩、格式化、脚本注入和文件管理功能

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors