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