From 89bc5f0a206cf9184b8a167b767845a9b85474cd Mon Sep 17 00:00:00 2001 From: dark Date: Fri, 13 Feb 2026 21:29:43 +0800 Subject: [PATCH] feat: add API verification script and update package.json --- frontend/react-shadcn/pc/package.json | 3 +- .../react-shadcn/pc/scripts/verify-api.cjs | 142 ++++++++++++++++++ 2 files changed, 144 insertions(+), 1 deletion(-) create mode 100644 frontend/react-shadcn/pc/scripts/verify-api.cjs diff --git a/frontend/react-shadcn/pc/package.json b/frontend/react-shadcn/pc/package.json index e92dda5..8ca1551 100644 --- a/frontend/react-shadcn/pc/package.json +++ b/frontend/react-shadcn/pc/package.json @@ -9,7 +9,8 @@ "lint": "eslint .", "preview": "vite preview", "test:e2e": "tests/run-tests.bat", - "test:check": "node tests/check-services.cjs" + "test:check": "node tests/check-services.cjs", + "verify:api": "node scripts/verify-api.cjs" }, "dependencies": { "class-variance-authority": "^0.7.1", diff --git a/frontend/react-shadcn/pc/scripts/verify-api.cjs b/frontend/react-shadcn/pc/scripts/verify-api.cjs new file mode 100644 index 0000000..0755bcd --- /dev/null +++ b/frontend/react-shadcn/pc/scripts/verify-api.cjs @@ -0,0 +1,142 @@ +/** + * API 对接验证脚本 + * 运行: node scripts/verify-api.cjs + */ + +const http = require('http'); + +const API_BASE_URL = 'localhost'; +const API_PORT = 8888; + +function makeRequest(method, path, body = null, token = null) { + return new Promise((resolve) => { + const options = { + hostname: API_BASE_URL, + port: API_PORT, + path: `/api/v1${path}`, + method: method, + headers: { + 'Content-Type': 'application/json', + }, + }; + + if (token) { + options.headers['Authorization'] = `Bearer ${token}`; + } + + const req = http.request(options, (res) => { + let data = ''; + res.on('data', (chunk) => (data += chunk)); + res.on('end', () => { + try { + const json = JSON.parse(data); + resolve({ + success: res.statusCode === 200, + status: res.statusCode, + data: json, + }); + } catch { + resolve({ + success: res.statusCode === 200, + status: res.statusCode, + data: data, + }); + } + }); + }); + + req.on('error', (err) => { + resolve({ + success: false, + error: err.message, + }); + }); + + if (body) { + req.write(JSON.stringify(body)); + } + req.end(); + }); +} + +async function main() { + console.log('🔍 API 对接验证\n'); + + let token = null; + + // 1. Login + console.log('POST /api/v1/login'); + const loginResult = await makeRequest('POST', '/login', { + email: 'admin@example.com', + password: 'password123', + }); + + if (loginResult.success && loginResult.data.token) { + token = loginResult.data.token; + console.log(' ✅ 登录成功'); + console.log(` 📝 Token: ${token.substring(0, 20)}...`); + } else { + console.log(' ❌ 登录失败'); + console.log(` 错误: ${loginResult.data?.message || loginResult.error}`); + return; + } + + // 2. Get Profile + console.log('\nGET /api/v1/profile/me'); + const profileResult = await makeRequest('GET', '/profile/me', null, token); + console.log( + profileResult.success + ? ' ✅ 获取个人资料成功' + : ` ❌ 失败: ${profileResult.data?.message || 'Unknown'}` + ); + + // 3. Update Profile + console.log('\nPUT /api/v1/profile/me'); + const updateResult = await makeRequest( + 'PUT', + '/profile/me', + { username: 'admin', phone: '13800138000' }, + token + ); + console.log( + updateResult.success + ? ' ✅ 更新个人资料成功' + : ` ❌ 失败: ${updateResult.data?.message || 'Unknown'}` + ); + + // 4. Get Users + console.log('\nGET /api/v1/users'); + const usersResult = await makeRequest('GET', '/users', null, token); + console.log( + usersResult.success + ? ` ✅ 获取用户列表成功 (${usersResult.data?.data?.users?.length || 0} 个用户)` + : ` ❌ 失败: ${usersResult.data?.message || 'Unknown'}` + ); + + // 5. Dashboard Stats (可能不存在) + console.log('\nGET /api/v1/dashboard/stats'); + const statsResult = await makeRequest('GET', '/dashboard/stats', null, token); + console.log( + statsResult.success + ? ' ✅ 获取仪表板统计成功' + : ' ⚠️ 端点不存在或需要后端实现' + ); + + // 6. Dashboard Activities (可能不存在) + console.log('\nGET /api/v1/dashboard/activities'); + const activitiesResult = await makeRequest( + 'GET', + '/dashboard/activities?limit=5', + null, + token + ); + console.log( + activitiesResult.success + ? ' ✅ 获取最近活动成功' + : ' ⚠️ 端点不存在或需要后端实现' + ); + + console.log('\n✨ 验证完成'); +} + +main();