一个功能完整的HTML处理和发布系统,提供HTML压缩、格式化、脚本注入和文件管理功能。
- ✅ HTML处理: 支持HTML压缩和格式化
- ✅ 脚本注入: 可向HTML中注入外部脚本或内联脚本
- ✅ 文件发布: 支持将处理后的HTML发布到指定目录
- ✅ 文件管理: 提供完整的文件CRUD操作
- ✅ 智能命名: 自动生成唯一文件名,支持自定义文件名
- ✅ RESTful API: 标准的REST接口设计
- ✅ API认证: 可选的Token认证机制,支持多token和频率限制
- ✅ 参数验证: 完整的请求参数验证
- ✅ 错误处理: 统一的错误处理机制
- ✅ 日志记录: 详细的操作日志和安全审计
- ✅ API文档: 自动生成的Swagger文档
- ✅ 安全性: 集成Helmet安全中间件和访问控制
npm install# 开发模式
npm run dev
# 生产模式
npm start启动服务后,访问 http://localhost:3000/api/docs 查看完整的API文档。
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"
}
}GET /api/html/files?page=1&limit=20&sortBy=modifiedAt&sortOrder=desc
GET /api/html/files/{filename}
PUT /api/html/files/{filename}
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 # 入口文件
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 }
})
});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 }
})
});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'
}
})
});// 生成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 }
})
});- 在
src/services/中添加业务逻辑 - 在
src/controllers/中添加控制器 - 在
src/routes/中添加路由 - 在
src/middleware/中添加验证中间件 - 更新API文档注释
# 运行测试
npm test
# 监听模式
npm run test:watch
# 生成覆盖率报告
npm run test:coverageFROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["npm", "start"]npm install -g pm2
pm2 start server.js --name html-processorMIT License