diff --git a/packages/cli/src/index.js b/packages/cli/src/index.js index ac7a269..b45cab8 100644 --- a/packages/cli/src/index.js +++ b/packages/cli/src/index.js @@ -11,8 +11,14 @@ async function startup () { const configPath = './user_config.json5' if (fs.existsSync(configPath)) { const file = fs.readFileSync(configPath) - const userConfig = jsonApi.parse(file.toString()) - console.info('读取 user_config.json5 成功:', configPath) + let userConfig + try { + userConfig = jsonApi.parse(file.toString()) + console.info(`读取和解析 user_config.json5 成功:${configPath}`) + } catch (e) { + console.error(`读取或解析 user_config.json5 失败: ${configPath}, error:`, e) + userConfig = {} + } DevSidecar.api.config.set(userConfig) } diff --git a/packages/cli/src/mitmproxy.js b/packages/cli/src/mitmproxy.js index 7612972..80ed841 100644 --- a/packages/cli/src/mitmproxy.js +++ b/packages/cli/src/mitmproxy.js @@ -15,7 +15,13 @@ if (process.argv && process.argv.length > 3) { const configJson = fs.readFileSync(configPath) log.info('读取 running.json by core 成功:', configPath) -const config = jsonApi.parse(configJson.toString()) +let config +try { + config = jsonApi.parse(configJson.toString()) +} catch (e) { + log.error(`running.json 文件内容格式不正确,文件路径:${configPath},文件内容: ${configJson.toString()}, error:`, e) + config = {} +} // const scriptDir = '../../gui/extra/scripts/' // config.setting.script.defaultDir = path.join(__dirname, scriptDir) // const pacFilePath = '../../gui/extra/pac/pac.txt' diff --git a/packages/core/src/config.js b/packages/core/src/config.js index 983edc9..c05ad47 100644 --- a/packages/core/src/config.js +++ b/packages/core/src/config.js @@ -146,7 +146,12 @@ const configApi = { } }, readRemoteConfig (suffix = '') { - return jsonApi.parse(configApi.readRemoteConfigStr(suffix)) + try { + return jsonApi.parse(configApi.readRemoteConfigStr(suffix)) + } catch (e) { + log.error(`读取远程配置失败,suffix: ${suffix}`, e) + return {} + } }, readRemoteConfigStr (suffix = '') { if (get().app.remoteConfig.enabled !== true) { @@ -223,7 +228,12 @@ const configApi = { const file = fs.readFileSync(configPath) log.info('读取 config.json 成功:', configPath) const fileStr = file.toString() - userConfig = fileStr && fileStr.length > 2 ? jsonApi.parse(fileStr) : {} + try { + userConfig = jsonApi.parse(fileStr) + } catch (e) { + log.error(`config.json 文件内容格式不正确,文件路径:${configPath},文件内容: ${fileStr}, error:`, e) + userConfig = {} + } } const config = configApi.set(userConfig) diff --git a/packages/core/src/config/index.js b/packages/core/src/config/index.js index 6cc6c28..19cb72f 100644 --- a/packages/core/src/config/index.js +++ b/packages/core/src/config/index.js @@ -479,7 +479,12 @@ function _getConfig () { return {} } - return jsonApi.parse(fs.readFileSync(configFilePath)) + try { + return jsonApi.parse(fs.readFileSync(configFilePath)) + } catch (e) { + console.error('读取配置文件失败:', configFilePath, e) + return {} + } } function _getRemoteSavePath (suffix = '') { @@ -516,7 +521,12 @@ function _readRemoteConfigStr (suffix = '') { } function _readRemoteConfig (suffix = '') { - return jsonApi.parse(_readRemoteConfigStr(suffix)) + try { + return jsonApi.parse(_readRemoteConfigStr(suffix)) + } catch (e) { + console.error(`读取远程配置失败,suffix: ${suffix}`, e) + return {} + } } function _getConfigFromFiles () { diff --git a/packages/gui/src/bridge/api/backend.js b/packages/gui/src/bridge/api/backend.js index 6cf37bf..379e5fd 100644 --- a/packages/gui/src/bridge/api/backend.js +++ b/packages/gui/src/bridge/api/backend.js @@ -100,8 +100,12 @@ const localApi = { }, save (setting = {}) { const settingPath = _getSettingsPath() - fs.writeFileSync(settingPath, jsonApi.stringify(setting)) - log.info('保存 setting.json 配置文件成功:', settingPath) + try { + fs.writeFileSync(settingPath, jsonApi.stringify(setting)) + log.info('保存 setting.json 配置文件成功:', settingPath) + } catch (e) { + log.error('保存 setting.json 配置文件失败:', settingPath, e) + } }, }, /** diff --git a/packages/gui/src/bridge/mitmproxy.js b/packages/gui/src/bridge/mitmproxy.js index bd7f3f0..1a03b3c 100644 --- a/packages/gui/src/bridge/mitmproxy.js +++ b/packages/gui/src/bridge/mitmproxy.js @@ -7,7 +7,13 @@ const log = require('@docmirror/mitmproxy/src/utils/util.log') // 当前脚本 const configPath = process.argv[2] const configJson = fs.readFileSync(configPath) log.info('读取 running.json by gui bridge 成功:', configPath) -const config = jsonApi.parse(configJson.toString()) +let config +try { + config = jsonApi.parse(configJson.toString()) +} catch (e) { + log.error(`running.json 文件内容格式不正确,文件路径:${configPath},文件内容: ${configJson.toString()}, error:`, e) + config = {} +} // const scriptDir = '../extra/scripts/' // config.setting.script.defaultDir = path.join(__dirname, scriptDir) // const pacFilePath = '../extra/pac/pac.txt' diff --git a/packages/mitmproxy/src/json.js b/packages/mitmproxy/src/json.js index f5f0bb8..d8dfa9d 100644 --- a/packages/mitmproxy/src/json.js +++ b/packages/mitmproxy/src/json.js @@ -5,11 +5,19 @@ if (JSON5.default) { } module.exports = { - parse (str) { + parse (str, defaultValue) { if (str == null || str.length < 2) { - return {} + return defaultValue || {} + } + if (defaultValue != null) { + try { + return JSON5.parse(str) + } catch { + return defaultValue + } + } else { + return JSON5.parse(str) } - return JSON5.parse(str) }, stringify (obj) { return JSON.stringify(obj, null, '\t') diff --git a/packages/mitmproxy/src/lib/proxy/compatible/compatible.js b/packages/mitmproxy/src/lib/proxy/compatible/compatible.js index e9ffba3..04bc3fe 100644 --- a/packages/mitmproxy/src/lib/proxy/compatible/compatible.js +++ b/packages/mitmproxy/src/lib/proxy/compatible/compatible.js @@ -62,12 +62,17 @@ function _loadFromFile (defaultConfig) { const file = fs.readFileSync(configPath) log.info('读取 automaticCompatibleConfig.json 成功:', configPath) const fileStr = file.toString() - config = fileStr && fileStr.length > 2 ? jsonApi.parse(fileStr) : defaultConfig - if (config.connect == null) { - config.connect = defaultConfig.connect - } - if (config.request == null) { - config.request = defaultConfig.request + try { + config = jsonApi.parse(fileStr) + if (config.connect == null) { + config.connect = defaultConfig.connect + } + if (config.request == null) { + config.request = defaultConfig.request + } + } catch (e) { + log.error('解析 automaticCompatibleConfig.json 成功:', configPath, ', error:', e) + return defaultConfig } }