1
This commit is contained in:
122
_script/fix_all_models.js
Normal file
122
_script/fix_all_models.js
Normal file
@@ -0,0 +1,122 @@
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
// 递归查找所有 .js 文件
|
||||
function findJsFiles(dir) {
|
||||
let results = [];
|
||||
const list = fs.readdirSync(dir);
|
||||
|
||||
list.forEach(file => {
|
||||
const filePath = path.join(dir, file);
|
||||
const stat = fs.statSync(filePath);
|
||||
|
||||
if (stat && stat.isDirectory()) {
|
||||
results = results.concat(findJsFiles(filePath));
|
||||
} else if (file.endsWith('.js')) {
|
||||
results.push(filePath);
|
||||
}
|
||||
});
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
// 修复单个 model 文件
|
||||
function fixModelFile(filePath) {
|
||||
try {
|
||||
let content = fs.readFileSync(filePath, 'utf8');
|
||||
const originalContent = content;
|
||||
|
||||
// 替换 DataTypes 为 Sequelize
|
||||
content = content.replace(/DataTypes/g, 'Sequelize');
|
||||
|
||||
// 修复 module.exports 格式
|
||||
// 匹配: module.exports = (sequelize, DataTypes) => { const model = sequelize.define(...) }
|
||||
const pattern1 = /module\.exports\s*=\s*\(sequelize,\s*DataTypes\)\s*=>\s*\{\s*const\s+(\w+)\s*=\s*sequelize\.define\('([^']+)',\s*\{([\s\S]*?)\}\);\s*\/\/[^}]*return\s+\1;\s*\};/g;
|
||||
|
||||
content = content.replace(pattern1, (match, modelName, tableName, fields) => {
|
||||
return `module.exports = (db) => {
|
||||
return db.define("${tableName}", {${fields}
|
||||
});
|
||||
};`;
|
||||
});
|
||||
|
||||
// 匹配: module.exports = (sequelize, DataTypes) => { const model = sequelize.define(...); return model; }
|
||||
const pattern2 = /module\.exports\s*=\s*\(sequelize,\s*DataTypes\)\s*=>\s*\{\s*const\s+(\w+)\s*=\s*sequelize\.define\('([^']+)',\s*\{([\s\S]*?)\}\);\s*return\s+\1;\s*\};/g;
|
||||
|
||||
content = content.replace(pattern2, (match, modelName, tableName, fields) => {
|
||||
return `module.exports = (db) => {
|
||||
return db.define("${tableName}", {${fields}
|
||||
});
|
||||
};`;
|
||||
});
|
||||
|
||||
// 匹配: module.exports = (sequelize, DataTypes) => { return sequelize.define(...); }
|
||||
const pattern3 = /module\.exports\s*=\s*\(sequelize,\s*DataTypes\)\s*=>\s*\{\s*return\s+sequelize\.define\('([^']+)',\s*\{([\s\S]*?)\}\);\s*\};/g;
|
||||
|
||||
content = content.replace(pattern3, (match, tableName, fields) => {
|
||||
return `module.exports = (db) => {
|
||||
return db.define("${tableName}", {${fields}
|
||||
});
|
||||
};`;
|
||||
});
|
||||
|
||||
// 匹配: module.exports = (sequelize, Sequelize) => { ... }
|
||||
const pattern4 = /module\.exports\s*=\s*\(sequelize,\s*Sequelize\)\s*=>\s*\{\s*const\s+(\w+)\s*=\s*sequelize\.define\('([^']+)',\s*\{([\s\S]*?)\}\);\s*\/\/[^}]*return\s+\1;\s*\};/g;
|
||||
|
||||
content = content.replace(pattern4, (match, modelName, tableName, fields) => {
|
||||
return `module.exports = (db) => {
|
||||
return db.define("${tableName}", {${fields}
|
||||
});
|
||||
};`;
|
||||
});
|
||||
|
||||
// 匹配: module.exports = (sequelize, Sequelize) => { const model = sequelize.define(...); return model; }
|
||||
const pattern5 = /module\.exports\s*=\s*\(sequelize,\s*Sequelize\)\s*=>\s*\{\s*const\s+(\w+)\s*=\s*sequelize\.define\('([^']+)',\s*\{([\s\S]*?)\}\);\s*return\s+\1;\s*\};/g;
|
||||
|
||||
content = content.replace(pattern5, (match, modelName, tableName, fields) => {
|
||||
return `module.exports = (db) => {
|
||||
return db.define("${tableName}", {${fields}
|
||||
});
|
||||
};`;
|
||||
});
|
||||
|
||||
// 清理多余的空行
|
||||
content = content.replace(/\n\s*\n\s*\n/g, '\n\n');
|
||||
|
||||
if (content !== originalContent) {
|
||||
fs.writeFileSync(filePath, content, 'utf8');
|
||||
console.log(`已修复: ${filePath}`);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
} catch (error) {
|
||||
console.error(`处理文件失败 ${filePath}:`, error.message);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// 主函数
|
||||
function main() {
|
||||
const modelDir = path.join(__dirname, 'api', 'model');
|
||||
|
||||
if (!fs.existsSync(modelDir)) {
|
||||
console.error('模型目录不存在:', modelDir);
|
||||
return;
|
||||
}
|
||||
|
||||
const jsFiles = findJsFiles(modelDir);
|
||||
let fixedCount = 0;
|
||||
|
||||
console.log(`找到 ${jsFiles.length} 个模型文件`);
|
||||
|
||||
jsFiles.forEach(filePath => {
|
||||
if (fixModelFile(filePath)) {
|
||||
fixedCount++;
|
||||
}
|
||||
});
|
||||
|
||||
console.log(`修复完成,共修复 ${fixedCount} 个文件`);
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user