/** * 测试视频封面功能脚本 * 验证所有视频的封面API是否正常工作 */ const http = require('http'); const sqlite3 = require('sqlite3').verbose(); const path = require('path'); // 数据库路径 const DB_PATH = path.join(__dirname, 'database', 'goguryeo_video.db'); // 测试视频封面API function testVideoFrame(videoId) { return new Promise((resolve) => { const options = { hostname: 'localhost', port: 4001, path: `/api/videos/${videoId}/frame`, method: 'GET' }; const req = http.request(options, (res) => { console.log(`视频 ${videoId}: 状态码 ${res.statusCode}, 内容类型: ${res.headers['content-type']}, 大小: ${res.headers['content-length']} bytes`); if (res.statusCode === 200 && res.headers['content-type'] === 'image/jpeg') { resolve({ videoId, success: true, size: res.headers['content-length'] }); } else { resolve({ videoId, success: false, statusCode: res.statusCode }); } // 消费响应数据 res.on('data', () => {}); res.on('end', () => {}); }); req.on('error', (err) => { console.error(`视频 ${videoId} 请求错误:`, err.message); resolve({ videoId, success: false, error: err.message }); }); req.setTimeout(10000, () => { console.error(`视频 ${videoId} 请求超时`); req.destroy(); resolve({ videoId, success: false, error: 'timeout' }); }); req.end(); }); } // 主测试函数 async function testAllVideoCovers() { console.log('开始测试视频封面功能...'); // 连接数据库 const db = new sqlite3.Database(DB_PATH, (err) => { if (err) { console.error('数据库连接失败:', err); return; } console.log('已连接到数据库'); }); // 获取所有视频ID db.all('SELECT id, title FROM videos ORDER BY id', async (err, rows) => { if (err) { console.error('查询视频失败:', err); return; } console.log(`找到 ${rows.length} 个视频,开始测试封面功能...\n`); const results = []; // 逐个测试视频封面 for (const video of rows) { const result = await testVideoFrame(video.id); results.push(result); // 添加延迟避免过快请求 await new Promise(resolve => setTimeout(resolve, 500)); } // 统计结果 const successful = results.filter(r => r.success); const failed = results.filter(r => !r.success); console.log('\n=== 测试结果统计 ==='); console.log(`总视频数: ${results.length}`); console.log(`成功生成封面: ${successful.length}`); console.log(`失败: ${failed.length}`); if (failed.length > 0) { console.log('\n失败的视频:'); failed.forEach(f => { console.log(`- 视频 ${f.videoId}: ${f.error || '状态码 ' + f.statusCode}`); }); } if (successful.length > 0) { console.log('\n成功的视频封面大小:'); successful.forEach(s => { console.log(`- 视频 ${s.videoId}: ${s.size} bytes`); }); } console.log('\n测试完成!'); // 关闭数据库连接 db.close(); }); } // 运行测试 testAllVideoCovers().catch(console.error);