mirror of
https://github.com/dqzboy/Docker-Proxy.git
synced 2026-01-12 16:25:42 +08:00
85 lines
2.3 KiB
JavaScript
85 lines
2.3 KiB
JavaScript
/**
|
||
* 目录初始化模块 - 确保应用需要的所有目录都存在
|
||
*/
|
||
const fs = require('fs').promises;
|
||
const path = require('path');
|
||
const logger = require('./logger');
|
||
|
||
/**
|
||
* 确保所有必需的目录存在
|
||
*/
|
||
// 添加缓存机制
|
||
const checkedDirs = new Set();
|
||
|
||
async function ensureDirectoriesExist() {
|
||
const dirs = [
|
||
// 文档目录
|
||
path.join(__dirname, 'documentation'),
|
||
// 日志目录
|
||
path.join(__dirname, 'logs'),
|
||
// 图片目录
|
||
path.join(__dirname, 'web', 'images'),
|
||
// 数据目录(SQLite数据库文件)
|
||
path.join(__dirname, 'data'),
|
||
// 配置目录
|
||
path.join(__dirname, 'config'),
|
||
// 临时文件目录
|
||
path.join(__dirname, 'temp'),
|
||
// 文档数据目录
|
||
path.join(__dirname, 'web', 'data', 'documentation')
|
||
];
|
||
|
||
for (const dir of dirs) {
|
||
if (checkedDirs.has(dir)) continue;
|
||
|
||
try {
|
||
await fs.access(dir);
|
||
logger.info(`目录已存在: ${dir}`);
|
||
} catch (error) {
|
||
if (error.code === 'ENOENT') {
|
||
try {
|
||
await fs.mkdir(dir, { recursive: true });
|
||
logger.success(`创建目录: ${dir}`);
|
||
} catch (mkdirError) {
|
||
logger.error(`创建目录 ${dir} 失败: ${mkdirError.message}`);
|
||
throw mkdirError;
|
||
}
|
||
} else {
|
||
logger.error(`检查目录 ${dir} 失败: ${error.message}`);
|
||
throw error;
|
||
}
|
||
}
|
||
|
||
checkedDirs.add(dir);
|
||
}
|
||
|
||
// 确保文档索引存在,但不再添加默认文档
|
||
const docIndexPath = path.join(__dirname, 'web', 'data', 'documentation', 'index.json');
|
||
try {
|
||
await fs.access(docIndexPath);
|
||
logger.info('文档索引已存在');
|
||
} catch (error) {
|
||
if (error.code === 'ENOENT') {
|
||
try {
|
||
// 创建一个空的文档索引
|
||
await fs.writeFile(docIndexPath, JSON.stringify([]), 'utf8');
|
||
logger.success('创建了空的文档索引文件');
|
||
} catch (writeError) {
|
||
logger.error(`创建文档索引失败: ${writeError.message}`);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// 如果直接运行此脚本
|
||
if (require.main === module) {
|
||
ensureDirectoriesExist()
|
||
.then(() => logger.info('目录初始化完成'))
|
||
.catch(err => {
|
||
logger.error('目录初始化失败:', err);
|
||
process.exit(1);
|
||
});
|
||
}
|
||
|
||
module.exports = { ensureDirectoriesExist };
|