NodeJS下引用mysql进行增删查改
NodeJS下要使用mySql需要安装mysql依赖,输入命令行:npm install mysql --save NodeJS中连接mysql数据库的简单方法我所知道的有createConnection(Object)方法和创建连接池 createPool(Object),这两个方法的参数相同,都接受一个对象作为参数,该对象有五个常用的属性host,port,user,password,database。与php中链接数据库的参数相同。属性列表如下:
host: 连接数据库所在的主机名. (默认: localhost) port: 连接端口. (默认: 3306) localAddress: 用于TCP连接的IP地址. (可选) socketPath: 链接到unix域的路径。在使用host和port时该参数会被忽略. user: MySQL用户的用户名. password: MySQL用户的密码. database: 链接到的数据库名称 (可选). charset: 连接的字符集. (默认: 'UTF8_GENERAL_CI'.设置该值要使用大写!) timezone: 储存本地时间的时区. (默认: 'local') stringifyObjects: 是否序列化对象. See issue #501. (默认: 'false') insecureAuth: 是否允许旧的身份验证方法连接到数据库实例. (默认: false) typeCast: 确定是否讲column值转换为本地JavaScript类型列值. (默认: true) queryFormat: 自定义的查询语句格式化函数. supportBigNumbers: 数据库处理大数字(长整型和含小数),时应该启用 (默认: false). bigNumberStrings: 启用 supportBigNumbers和bigNumberStrings 并强制这些数字以字符串的方式返回(默认: false). dateStrings: 强制日期类型(TIMESTAMP, DATETIME, DATE)以字符串返回,而不是一javascript Date对象返回. (默认: false) debug: 是否开启调试. (默认: false) multipleStatements: 是否允许在一个query中传递多个查询语句. (Default: false) flags: 链接标志.
还可以使用字符串连接数据库例如:
var connection = mysql.createConnection('mysql://user:pass@host/db?debug=true&charset=BIG5_CHINESE_CI&timezone=-0700');
这里我着重说下创建连接池 createPool(Object)连接数据库的方法:
开发中我们通常喜欢把连接数据库需要的属性写到一个配置文件里,然后作为createPool的参数传进去,如下图:
我们把数据库的操作写到一块儿,用的时候直接调用就好了,数据库操作代码如下:
const mysql=require('mysql'); let client=undefined; exports.connect=function(sqlConfig){ client=mysql.createPool(sqlConfig); }; const query=function(sql,cb){ client.getConnection(function(err,connection){ if(err) { console.log("connection Error"+JSON.stringify(err)); cb(err); throw err; }else{ connection.query(sql,function(conErr,result,fields){ if(conErr){ console.log('connection.query error'); cb(conErr); }else{ cb(null,result); } connection.release(); }); } }); }; exports.checkPlayer=function(key,cb) { let sql='select * from playertable where uniqueID='+key; query(sql,function(err,data){ if(err){ console.log('query cb Error='+err); } cb(err,data); }); }; exports.insertPlayer=function(map,cb) { let sql='insert into playertable values('+ map._uniqueID+','+ map._countID+",'"+ map._nickName+"',"+ map._houseCount+",'"+ map._avatarUrl+"'"+ ')'; query(sql,function(err,data){ if(err){ console.log('insert cb Error='+err); } cb(err,data); }); };
接着看调用部分代码:
const mysql=require('./mysqlHelper'); const mysqlConfig=require('./mysqlConfig.json'); mysql.connect(mysqlConfig.Config); mysql.checkPlayer('200',function(err,data){ if(err){ console.log("CheckPlayer Err="+err); } else{ console.log("check Result="+JSON.stringify(data)); } }); mysql.insertPlayer({ _uniqueID:23, _countID:24, _nickName:"CBerKing", _houseCount:5, _avatarUrl:"https://avatar.csdn.net/2/B/4/1_cjb_king.jpg" },function(err,data){ if(err){ console.log('insert player Err='+err); }else{ console.log("insert result Sucess="+JSON.stringify(data)); } });
总结:1.使用npm install mysql --save命令加载mysql依赖
2.引用:const mysql=require('mysql');
3.创建连接池返回连接对象:let client=mysql.createPool(mysqlConfig);
4.通过连接对象执行回调:
client.getConnection(function(err,connection){})
5.通过回调得到的connection执行sql语句:
connection.query(sql,function(conErr,result,fields){})