2 changed files with 144 additions and 1 deletions
@ -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(); |
||||
Loading…
Reference in new issue