const fs = require('fs'); const path = require('path'); // 读取server-mysql.js文件内容 function readServerFile() { return fs.readFileSync(path.join(__dirname, 'server-mysql.js'), 'utf8'); } // 验证毛重字段处理逻辑 function verifyGrossWeightHandling() { try { const fileContent = readServerFile(); // 初始化验证结果 const verificationResult = { totalIssues: 0, successPoints: 0, issues: [], successDetails: [] }; // 检查响应中间件中的/products/list接口 const listMiddlewarePattern = /data\.products\s*=\s*data\.products\.map\(product\s*=>\s*\{[\s\S]*?product\.grossWeight\s*=\s*([^;]+);/; const listMiddlewareMatch = fileContent.match(listMiddlewarePattern); if (listMiddlewareMatch && listMiddlewareMatch[1].includes('0')) { verificationResult.successPoints++; verificationResult.successDetails.push('✓ 响应中间件(/products/list)已正确设置空毛重默认值为0'); } else { verificationResult.totalIssues++; verificationResult.issues.push('✗ 响应中间件(/products/list)未正确设置空毛重默认值'); } // 检查响应中间件中的/data接口 const dataMiddlewarePattern = /data\.data\.products\s*=\s*data\.data\.products\.map\(product\s*=>\s*\{[\s\S]*?product\.grossWeight\s*=\s*([^;]+);/; const dataMiddlewareMatch = fileContent.match(dataMiddlewarePattern); if (dataMiddlewareMatch && dataMiddlewareMatch[1].includes('0')) { verificationResult.successPoints++; verificationResult.successDetails.push('✓ 响应中间件(/data)已正确设置空毛重默认值为0'); } else { verificationResult.totalIssues++; verificationResult.issues.push('✗ 响应中间件(/data)未正确设置空毛重默认值'); } // 检查商品上传接口 const uploadApiPattern = /app\.post\('\/api\/products\/upload',[\s\S]*?let\s+processedGrossWeight\s*=\s*(\d+)/; const uploadApiMatch = fileContent.match(uploadApiPattern); if (uploadApiMatch && uploadApiMatch[1] === '0') { verificationResult.successPoints++; verificationResult.successDetails.push('✓ 商品上传接口已正确设置空毛重默认值为0'); } else { verificationResult.totalIssues++; verificationResult.issues.push('✗ 商品上传接口未正确设置空毛重默认值'); } // 检查编辑商品API const editApiPattern = /parsedValue:\s*product\.grossWeight\s*===\s*''\s*\|\|\s*product\.grossWeight\s*===\s*null\s*\|\|\s*product\.grossWeight\s*===\s*undefined\s*\?\s*(\d+)/; const editApiMatch = fileContent.match(editApiPattern); if (editApiMatch && editApiMatch[1] === '0') { verificationResult.successPoints++; verificationResult.successDetails.push('✓ 编辑商品API已正确设置空毛重默认值为0'); } else { verificationResult.totalIssues++; verificationResult.issues.push('✗ 编辑商品API未正确设置空毛重默认值'); } // 检查是否还有设置为5的地方 const remaining5Pattern = /grossWeight\s*=\s*5/g; const remaining5Matches = fileContent.match(remaining5Pattern); if (remaining5Matches && remaining5Matches.length > 0) { verificationResult.totalIssues += remaining5Matches.length; verificationResult.issues.push(`✗ 发现${remaining5Matches.length}处仍将毛重设置为5的地方`); } else { verificationResult.successPoints++; verificationResult.successDetails.push('✓ 未发现仍将毛重设置为5的残留代码'); } // 检查是否正确实现了空值返回0的逻辑 const emptyValueHandlingPattern = /product\.grossWeight\s*===\s*null\s*\|\|\s*product\.grossWeight\s*===\s*undefined\s*\|\|\s*product\.grossWeight\s*===\s*''\s*\?\s*0/g; const emptyValueMatches = fileContent.match(emptyValueHandlingPattern); if (emptyValueMatches && emptyValueMatches.length > 0) { verificationResult.successPoints++; verificationResult.successDetails.push(`✓ 发现${emptyValueMatches.length}处正确实现了空值返回0的逻辑`); } // 输出验证结果 console.log('\n======== 毛重字段处理逻辑全面验证结果 ========'); console.log('\n成功项:'); verificationResult.successDetails.forEach(detail => console.log(detail)); console.log('\n问题项:'); if (verificationResult.issues.length === 0) { console.log('✓ 未发现任何问题'); } else { verificationResult.issues.forEach(issue => console.log(issue)); } console.log('\n总体评估:'); if (verificationResult.totalIssues === 0) { console.log('✅ 验证成功: 所有毛重字段处理逻辑已正确实现'); console.log(' 已满足要求: 空值时小程序和数据库均返回0,非空值返回实际值'); } else { console.log(`❌ 验证失败: 发现${verificationResult.totalIssues}个问题需要修复`); } console.log('=============================================='); // 设置退出码 process.exit(verificationResult.totalIssues > 0 ? 1 : 0); } catch (error) { console.error('验证过程中发生错误:', error); process.exit(1); } } // 执行验证 verifyGrossWeightHandling();