es6使用单例模式,让js代码组织起来更加优雅

    xiaoxiao2023-12-21  154

    1)创建一个类,module.exports = xxx 并且导出

    var MongooseAsync = require("../../../core/MongooseAsync.js") var Config = require("../../../core/Config.js") class DataBaseManager { constructor() { this.inited = false; } static instance() { if (DataBaseManager.g_Instance == null) { DataBaseManager.g_Instance = new DataBaseManager(); } return DataBaseManager.g_Instance; } async initDB(account, pass, ip, port, dbName) { if (this.inited == true) return; this.inited = true; this.mog = new MongooseAsync(); var isOK = await this.mog.connect(account, pass, ip, port, dbName); if (isOK) {//在这里定义表 this.mog.makeModel("userinfo", { id: Number, openid: String, unionid: String, nickname: String, sex: Number, headimgurl: String, account: String, pass: String, loginTime: Date, createTime: Date, score: Number })//id account pass logintime createtime score return Promise.resolve(true) } return Promise.resolve(false); } /** * 连接服务器 */ async initDBFromServerConfig() { var dbConfig = Config.getServerConfig()["database"]["mongodb"]; return await this.initDB(dbConfig.account, dbConfig.pass, dbConfig.ip, dbConfig.port, dbConfig.dbname); } async createPlayer(id, openid, unionid, nickname, sex, headimgurl, account, pass, score) { var userInfoModel = this.mog.getModle("userinfo"); var newPlayer = new userInfoModel(); newPlayer.id = id; newPlayer.openid = openid; newPlayer.unionid = unionid; newPlayer.nickname = nickname; newPlayer.headimgurl = headimgurl; newPlayer.account = account; newPlayer.pass = pass; newPlayer.score = score; newPlayer.sex = sex; newPlayer.loginTime = new Date(); newPlayer.createTime = new Date(); var info = await newPlayer.save().catch(function (e) { info = null; }) return Promise.resolve(info); } async canLogin(account, pass, options = {id: 1}) { var userInfoModel = this.mog.getModle("userinfo"); var infos = await userInfoModel.findOne({account: account, pass: pass}, options).lean().catch(function (e) { infos = null; }) return Promise.resolve(infos); } async findPlayer(account, options) { var userInfoModel = this.mog.getModle("userinfo"); var infos = await userInfoModel.findOne({account: account}, options).lean().catch(function (e) { infos = null; }) return Promise.resolve(infos); } async findPlayerWithId(playerId, options) { var userInfoModel = this.mog.getModle("userinfo"); var infos = await userInfoModel.findOne({id: playerId}, options).lean().catch(function (e) { infos = null; }) return Promise.resolve(infos); } async findPlayerWithOpenId(openId) { var userInfoModel = this.mog.getModle("userinfo"); var infos = await userInfoModel.findOne({openid: openId}).lean().catch(function (e) { infos = null; }) return Promise.resolve(infos); } async updatePlayerWithOpenId(openId, values) { var userInfoModel = this.mog.getModle("userinfo"); var info = await userInfoModel.update({openid: openId}, values).catch(function (e) { info = null; }) return Promise.resolve(info); } } DataBaseManager.g_Instance = null; module.exports = DataBaseManager;

    2)使用DataBaseManager.instance().xxx()这样就可以使用单例类了

    var DataBaseManager = require("./../Theme/FangkaMajiang/db/DataBaseManager.js"); var ok = await DataBaseManager.instance().initDBFromServerConfig(); // 因为要等待数据库初始化完毕,因此必须用async包括起来

     

    最新回复(0)