npm install
npm start
服务器将在 http://localhost:3000 启动
http://localhost:3000GET /api/health
响应示例:
{
"status": "ok",
"timestamp": "2026-03-17T12:00:00.000Z",
"endpoints": {
"/api/subtitles": "GET - 获取所有字幕列表",
"/api/subtitles/:id": "GET - 获取单个字幕信息",
"/api/subtitles/:id/content": "GET - 获取字幕文件内容",
"/api/tracks/:trackId": "GET - 模拟原网站track API",
"/api/subtitles": "POST - 上传字幕",
"/api/subtitles/:id": "DELETE - 删除字幕"
}
}
GET /api/subtitles
响应示例:
{
"success": true,
"data": [
{
"id": "test-001",
"title": "社团JK交换_测试字幕",
"audioUrl": "/audio/test.mp3",
"vttUrl": "/subtitles/test-001.vtt",
"duration": 115,
"format": "vtt"
},
{
"id": "sample-lrc",
"title": "示例LRC歌词",
"audioUrl": "/audio/sample.mp3",
"lrcUrl": "/subtitles/sample.lrc",
"duration": 120,
"format": "lrc"
}
]
}
GET /api/subtitles/:id
示例:
GET /api/subtitles/test-001
响应示例:
{
"success": true,
"data": {
"id": "test-001",
"title": "社团JK交换_测试字幕",
"audioUrl": "/audio/test.mp3",
"vttUrl": "/subtitles/test-001.vtt",
"duration": 115,
"format": "vtt"
}
}
GET /api/subtitles/:id/content
示例:
GET /api/subtitles/test-001/content
响应类型: text/vtt 或 text/plain
响应示例:
WEBVTT 00:00.000 --> 00:03.500 社团的事啊、有的没的,他也帮我出了很多主意,帮了我很多忙 00:03.500 --> 00:08.200 果然还是…刺刺痒痒的…没办法像小鸟那样… ...
GET /api/tracks/:trackId?v=2
示例:
GET /api/tracks/01444800?v=2
响应示例:
[
{
"type": "folder",
"title": "测试曲目",
"children": [
{
"type": "folder",
"title": "字幕文件",
"children": [
{
"type": "audio",
"hash": "test/001",
"title": "测试音频.mp3",
"workTitle": "测试曲目 - 示例字幕",
"mediaStreamUrl": "/audio/test.mp3",
"mediaDownloadUrl": "/audio/test.mp3",
"duration": 115,
"size": 5000000
},
{
"type": "text",
"hash": "test/002",
"title": "测试字幕.vtt",
"workTitle": "测试曲目 - 示例字幕",
"mediaStreamUrl": "/api/subtitles/test-001",
"mediaDownloadUrl": "/api/subtitles/test-001",
"duration": 115,
"size": 5000
}
]
}
]
}
]
POST /api/subtitles Content-Type: application/json
请求体:
{
"id": "custom-001",
"title": "自定义字幕",
"format": "vtt",
"content": "WEBVTT\n\n00:00.000 --> 00:05.000\n测试字幕"
}
响应示例:
{
"success": true,
"data": {
"id": "custom-001",
"title": "自定义字幕",
"format": "vtt",
"duration": 120,
"vttUrl": "/api/subtitles/custom-001/content",
"content": "WEBVTT\n\n00:00.000 --> 00:05.000\n测试字幕"
}
}
DELETE /api/subtitles/:id
示例:
DELETE /api/subtitles/test-001
响应示例:
{
"success": true,
"message": "Subtitle deleted"
}
http://localhost:3000/api-test.html
功能:
http://localhost:3000/test-player.html
功能:
curl http://localhost:3000/api/subtitles
curl http://localhost:3000/api/subtitles/test-001
curl http://localhost:3000/api/subtitles/test-001/content
curl "http://localhost:3000/api/tracks/01444800?v=2"
curl -X POST http://localhost:3000/api/subtitles \
-H "Content-Type: application/json" \
-d '{
"title": "测试字幕",
"format": "vtt",
"content": "WEBVTT\n\n00:00.000 --> 00:05.000\n测试内容"
}'
curl -X DELETE http://localhost:3000/api/subtitles/custom-001
/workspace/ ├── server.js # Express服务器 ├── package.json # 依赖配置 ├── api-test.html # API测试控制台 ├── test-player.html # 歌词播放器 ├── sample-lyrics.lrc # 示例LRC歌词 └── README-SERVER.md # 本文档
方法1: 通过API上传
fetch('/api/subtitles', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
id: 'new-001',
title: '新字幕',
format: 'vtt',
content: 'WEBVTT\n\n00:00.000 --> 00:05.000\n新字幕内容'
})
});
方法2: 直接修改server.js中的subtitleDatabase对象
服务器启动后会显示所有API请求:
📋 GET /api/subtitles 📄 GET /api/subtitles/test-001 📝 GET /api/subtitles/test-001/content
问题: CORS错误
解决方案: 服务器已启用CORS,确保使用http://localhost:3000访问
问题: 字幕不显示
解决方案: 检查Console日志,确认API返回数据格式正确
问题: 歌词不同步
解决方案: 检查VTT/LRC格式是否正确,时间戳是否递增
server.js中的PORT常量如有问题,请查看: