安装
$ 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);
});