mock-server.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. const http = require('http');
  2. const url = require('url');
  3. const mockConfig = require('./mock/mockData.js');
  4. const PORT = 3001;
  5. const BASE_PATH = '/mock-api';
  6. function getMockData(requestUrl, method) {
  7. const mockDataList = mockConfig.getMockDataList();
  8. for (const key in mockDataList) {
  9. const item = mockDataList[key];
  10. if (item.url === requestUrl && item.method.toLowerCase() === method.toLowerCase()) {
  11. return item;
  12. }
  13. }
  14. return null;
  15. }
  16. function sendJson(res, statusCode, data) {
  17. res.writeHead(statusCode, {
  18. 'Content-Type': 'application/json',
  19. 'Access-Control-Allow-Origin': '*',
  20. 'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
  21. 'Access-Control-Allow-Headers': 'Content-Type, Authorization, belongSystemId, belongSystemName'
  22. });
  23. res.end(JSON.stringify(data));
  24. }
  25. const server = http.createServer((req, res) => {
  26. if (req.method === 'OPTIONS') {
  27. sendJson(res, 204, null);
  28. return;
  29. }
  30. const parsedUrl = url.parse(req.url, true);
  31. const pathname = parsedUrl.pathname;
  32. const method = req.method;
  33. if (!pathname.startsWith(BASE_PATH)) {
  34. sendJson(res, 404, { code: 404, msg: 'Not Found', data: null });
  35. return;
  36. }
  37. const apiPath = pathname.replace(BASE_PATH, '');
  38. console.log(`[Mock Server] 收到请求: ${method} ${apiPath}`);
  39. if (Object.keys(parsedUrl.query).length > 0) {
  40. console.log(`[Mock Server] Query参数:`, parsedUrl.query);
  41. }
  42. const mockData = getMockData(apiPath, method);
  43. if (mockData) {
  44. let body = '';
  45. req.on('data', chunk => {
  46. body += chunk.toString();
  47. });
  48. req.on('end', () => {
  49. if (body) {
  50. try {
  51. console.log(`[Mock Server] Body参数:`, JSON.parse(body));
  52. } catch (e) {
  53. console.log(`[Mock Server] Body参数:`, body);
  54. }
  55. }
  56. setTimeout(() => {
  57. sendJson(res, 200, mockData.response);
  58. console.log(`[Mock Server] 返回Mock数据\n`);
  59. }, mockData.delay || 300);
  60. });
  61. } else {
  62. console.log(`[Mock Server] 未找到Mock配置: ${method} ${apiPath}\n`);
  63. sendJson(res, 404, { code: 404, msg: 'Mock接口不存在', data: null });
  64. }
  65. });
  66. server.listen(PORT, () => {
  67. console.log('==========================================');
  68. console.log('🟢 Mock服务器已启动');
  69. console.log(`📡 监听地址: http://localhost:${PORT}`);
  70. console.log(`🔗 接口前缀: ${BASE_PATH}`);
  71. console.log('==========================================');
  72. const mockList = mockConfig.getMockDataList();
  73. console.log('\n已注册的Mock接口:');
  74. Object.keys(mockList).forEach(key => {
  75. const item = mockList[key];
  76. console.log(` ${item.method.toUpperCase().padEnd(6)} ${item.url}`);
  77. });
  78. console.log('==========================================\n');
  79. });