You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
3.5 KiB
142 lines
3.5 KiB
/**
|
|
* 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();
|
|
|