function editor_config() { this.address = "_server/config.json"; this._isWriting = false; } editor_config.prototype.load = function(callback) { var _this = this; fs.readFile(this.address, "utf-8", function(e, d) { if (e) { console.error("无法读取配置文件, 已重新生成"); _this.config = {}; _this.save(callback); } else { try { _this.config = JSON.parse(d); if (callback) callback(); } catch (e) { console.error(e); _this.config = {}; _this.save(callback); } } }); } editor_config.prototype.get = function(key, defaultValue) { value = this.config[key]; return value != null ? value : defaultValue; } editor_config.prototype.set = function(key, value, callback) { this.config[key] = value; if (callback !== false) this.save(callback); } editor_config.prototype.save = function(callback) { // 读写锁防止写文件冲突 if (this._isWriting) return; try { this._isWriting = true; var _this = this; fs.writeFile(this.address, JSON.stringify(this.config) ,'utf-8', function(e) { _this._isWriting = false; if (e) console.error("写入配置文件失败"); if (callback instanceof Function) callback(); }) } catch (e) { this._isWriting = false; console.error(e); if (callback instanceof Function) callback(); } }