simple-database-test.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218
  1. const axios = require('axios');
  2. const colors = require('colors');
  3. // 配置
  4. const BASE_URL = 'http://localhost/dev-api';
  5. // 获取Token
  6. async function getToken() {
  7. try {
  8. const { getToken } = require('./quick-token-getter');
  9. return await getToken();
  10. } catch (error) {
  11. console.log('获取Token失败,使用模拟Token'.yellow);
  12. return null;
  13. }
  14. }
  15. // 测试简单接口(不需要特殊权限)
  16. async function testSimpleAPIs(token) {
  17. console.log('\n🧪 测试基础接口(权限测试)'.blue.bold);
  18. console.log('='.repeat(60).blue);
  19. const headers = {
  20. 'Content-Type': 'application/json;charset=utf-8',
  21. clientid: 'e5cd7e4891bf95d1d19206ce24a7b32e',
  22. 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
  23. referer: 'http://localhost/login?redirect=%252Findex',
  24. };
  25. if (token) {
  26. headers['Authorization'] = `Bearer ${token}`;
  27. }
  28. // 测试系统字典接口
  29. try {
  30. console.log('1. 测试字典接口 (system:dict:list)'.cyan);
  31. const dictResult = await axios({
  32. method: 'get',
  33. url: `${BASE_URL}/system/dict/data/list`,
  34. headers: headers,
  35. params: { pageNum: 1, pageSize: 5 },
  36. timeout: 10000,
  37. });
  38. console.log(`✅ 字典接口调用成功,状态: ${dictResult.status}`.green);
  39. if (dictResult.data && dictResult.data.data) {
  40. console.log(
  41. `📊 字典数据条数: ${dictResult.data.data.total || dictResult.data.data.length}`
  42. .yellow,
  43. );
  44. }
  45. } catch (error) {
  46. console.log(`❌ 字典接口失败: ${error.response?.data?.msg || error.message}`.red);
  47. }
  48. // 测试菜单接口
  49. try {
  50. console.log('\n2. 测试菜单接口 (system:menu:list)'.cyan);
  51. const menuResult = await axios({
  52. method: 'get',
  53. url: `${BASE_URL}/system/menu/list`,
  54. headers: headers,
  55. timeout: 10000,
  56. });
  57. console.log(`✅ 菜单接口调用成功,状态: ${menuResult.status}`.green);
  58. if (menuResult.data && menuResult.data.data) {
  59. console.log(`📊 菜单数据条数: ${menuResult.data.data.length}`.yellow);
  60. }
  61. } catch (error) {
  62. console.log(`❌ 菜单接口失败: ${error.response?.data?.msg || error.message}`.red);
  63. }
  64. // 测试报修工单接口(使用修改后的权限)
  65. try {
  66. console.log('\n3. 测试报修工单接口 (system:user:list权限)'.cyan);
  67. const repairResult = await axios({
  68. method: 'get',
  69. url: `${BASE_URL}/pm/repairOrder/list`,
  70. headers: headers,
  71. params: { pageNum: 1, pageSize: 10 },
  72. timeout: 10000,
  73. });
  74. console.log(`✅ 报修工单接口调用成功,状态: ${repairResult.status}`.green);
  75. if (repairResult.data) {
  76. console.log(`📊 响应消息: ${repairResult.data.msg}`.yellow);
  77. if (repairResult.data.data) {
  78. if (repairResult.data.data.rows) {
  79. console.log(`📄 数据条数: ${repairResult.data.data.total}`.yellow);
  80. console.log(`📋 当前页: ${repairResult.data.data.rows.length}条`.yellow);
  81. } else if (Array.isArray(repairResult.data.data)) {
  82. console.log(`📄 数据数组长度: ${repairResult.data.data.length}`.yellow);
  83. }
  84. } else {
  85. console.log('⚠️ 响应中没有data字段'.yellow);
  86. }
  87. }
  88. } catch (error) {
  89. console.log(`❌ 报修工单接口失败: ${error.response?.data?.msg || error.message}`.red);
  90. if (error.response?.data) {
  91. console.log('详细错误信息:', JSON.stringify(error.response.data, null, 2));
  92. }
  93. }
  94. // 测试维修分类接口
  95. try {
  96. console.log('\n4. 测试维修分类接口'.cyan);
  97. const categoryResult = await axios({
  98. method: 'get',
  99. url: `${BASE_URL}/pm/repairCategory/list`,
  100. headers: headers,
  101. params: { pageNum: 1, pageSize: 10 },
  102. timeout: 10000,
  103. });
  104. console.log(`✅ 维修分类接口调用成功,状态: ${categoryResult.status}`.green);
  105. if (categoryResult.data && categoryResult.data.data) {
  106. if (categoryResult.data.data.rows) {
  107. console.log(`📊 维修分类数据: ${categoryResult.data.data.total}条`.yellow);
  108. }
  109. }
  110. } catch (error) {
  111. console.log(`❌ 维修分类接口失败: ${error.response?.data?.msg || error.message}`.red);
  112. }
  113. }
  114. // 测试路径映射
  115. async function testPathMappings(token) {
  116. console.log('\n🛣️ 测试路径映射'.blue.bold);
  117. console.log('='.repeat(60).blue);
  118. const headers = {
  119. 'Content-Type': 'application/json;charset=utf-8',
  120. clientid: 'e5cd7e4891bf95d1d19206ce24a7b32e',
  121. 'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
  122. referer: 'http://localhost/login?redirect=%252Findex',
  123. };
  124. if (token) {
  125. headers['Authorization'] = `Bearer ${token}`;
  126. }
  127. const testPaths = [
  128. '/pm/repairOrder/list',
  129. '/pm/repairOrder/statistics',
  130. '/pm/repairCategory/list',
  131. '/pm/repairCategory/options',
  132. '/pm/repairCategory/tree',
  133. ];
  134. for (let path of testPaths) {
  135. try {
  136. console.log(`测试路径: ${path}`.cyan);
  137. const result = await axios({
  138. method: 'get',
  139. url: `${BASE_URL}${path}`,
  140. headers: headers,
  141. timeout: 5000,
  142. });
  143. console.log(` ✅ ${path} - 状态: ${result.status}`.green);
  144. } catch (error) {
  145. const status = error.response?.status || 'timeout';
  146. const message = error.response?.data?.msg || error.message;
  147. console.log(` ❌ ${path} - 状态: ${status}, 消息: ${message}`.red);
  148. }
  149. }
  150. }
  151. // 主函数
  152. async function runDatabaseTest() {
  153. console.log('🔍 数据库和API简单测试工具'.rainbow.bold);
  154. console.log('='.repeat(80).rainbow);
  155. try {
  156. // 1. 获取Token
  157. console.log('\n🔐 获取认证Token'.magenta.bold);
  158. const token = await getToken();
  159. if (token && token.length > 50) {
  160. console.log('✅ 获取到有效Token'.green);
  161. } else {
  162. console.log('⚠️ Token获取失败,将进行无认证测试'.yellow);
  163. }
  164. // 2. 测试基础接口
  165. await testSimpleAPIs(token);
  166. // 3. 测试路径映射
  167. await testPathMappings(token);
  168. console.log('\n📋 测试总结'.rainbow.bold);
  169. console.log('='.repeat(60).rainbow);
  170. console.log('如果报修工单接口仍然失败,可能的原因:');
  171. console.log('1. 🔄 后端代码未重新编译');
  172. console.log('2. 🏗️ Controller类包路径问题');
  173. console.log('3. 🗄️ 数据库表不存在');
  174. console.log('4. 🔐 权限配置问题');
  175. console.log('5. 🌐 路由映射问题');
  176. } catch (error) {
  177. console.error('\n💥 测试过程出错:'.red.bold, error.message);
  178. }
  179. }
  180. // 运行测试
  181. if (require.main === module) {
  182. runDatabaseTest()
  183. .then(() => {
  184. console.log('\n👋 测试完成'.cyan);
  185. })
  186. .catch((error) => {
  187. console.error('测试脚本执行失败:', error);
  188. process.exit(1);
  189. });
  190. }
  191. module.exports = { runDatabaseTest };