Pomelo MySQL

安装

$ cd game-server
$ npm i --save mysql

配置

$ vim /game-server/config/mysql.json
{
  "development": {
    "host": "127.0.0.1",
    "port": 3306,
    "user": "root",
    "password":"root",
    "charset": "utf8mb4",
    "database": "pomelo",
    "connectionLimit": 10
  },
  "production": {
    "host": "127.0.0.1",
    "port": 3306,
    "user": "root",
    "password":"root",
    "charset": "utf8mb4",
    "database": "pomelo",
    "connectionLimit": 10
  }
}

封装

$ vim game-server/utils/mysql.js
const mysql = require("mysql");

let Module = function(config){
    if(!config){
        console.error("mysql config is null");
        return;
    }
    this.pool = mysql.createPool(config);
};

Module.prototype.query = function(sql, values){
  return new Promise((resolve, reject)=>{
    this.pool.getConnection((error, connection)=>{
       if(error){
           reject(error);
       }else{
           if(values){
               connection.query(sql, values, (err, rows)=>{
                   if(err){
                       reject(err);
                   }else{
                       if(rows.length===1){
                           rows = rows[0];
                       }
                       resolve(rows);
                   }
               });
           }else{
               connection.query(sql, (err, rows)=>{
                   if(err){
                       reject(err);
                   }else{
                       if(rows.length===1){
                           rows = rows[0];
                       }
                       resolve(rows);
                   }
               });
           }
           connection.release();
       }
    });
  });
};

module.exports = function(config){
  return new Module(config);
};

使用

在入口文件app.js中加载数据配置并设置mysql对象

$ vim app.js
app.configure("production|development", function(){
    //加载数据库配置
    app.loadConfig("mysqlConfig", app.getBase()+"/config/mysql.json");
    //初始化数据库连接对象
    const mysql = require(app.getBase()+"/utils/mysql.js");
    app.set("mysql", mysql(app.settings.mysqlConfig));
});

加载配置文件

app.js入口文件中使用app.loadConfig(key, value)方法加载game-server/config文件夹下的任何JSON格式的配置文件。加载后的配置文件信息会被保存到app.setting对象对应key的属性中。

$ vim game-server/app.js
app.configure("production|development", function(){
    //加载数据库配置
    app.loadConfig("mysqlConfig", app.getBase()+"/config/mysql.json");
    //获取配置文件
    console.log(app.settings.mysqlConfig);
});

访问上下文变量

在应用实例app中具有针对上下文的getter/setter方法用于获取和设置变量。

app.set(name, value, [isAttach]);

setter方法的第三个可选参数isAttach表示是否作为应用实例app属性附加。

app.get(name);

例如:设置并获取MySQL,并执行其query方法。

app.configure("production|development", async ()=>{
    //加载数据库配置
    app.loadConfig("mysqlConfig", app.getBase()+"/config/mysql.json");
    //初始化数据库连接对象
    const mysql = require(app.getBase()+"/utils/mysql.js");
    app.set("mysql", mysql(app.settings.mysqlConfig));
    //test
    const sql = "SELECT * FROM game_user WHERE 1=1";
    const result = await app.get("mysql").query(sql);
    console.log(result);
});

你可能感兴趣的:(Pomelo MySQL)