#db.js var mysql = require('mysql'); var con = mysql.createConnection{ host : 'xxx.xx.xxx.xxx', user : 'xxx', password : 'xxxxxx', port : '3306', }; con.connect(function(err){ if(err){ console.log('[err]:'+err); }else{ console.log('[connection]:succeed'); } }); exports.con = con;
#dbquery.js var db = require('./db.js'); var connect = db.connect;
function Query(querystring,post){ connect.query(querystring,post,function(err,rows,fields){ if(err){ return {'success':false,'result':err}; }else{ return {'success':true,'result':rows}; } }); }
我没有断开数据库连接,会不会在多次调用dbquery.js的时候生成多个数据库连接。
回复 (7)
不会, db.js只会运行一次, 之后require得到的都是第一次运行结果的缓存, 也就是同一个连接
这个模块现在还会不会阻塞?
不会,db.js只会执行一次。但是这样写会暴露不少问题。 例如多次查询会使用同一个con,容易出问题,而且con长期处于连接状态,被断开了怎么处理,应该要对数据库连接的生命周期进行封装,或者找现成的库。
@jimliang 你的意思是每个请求都去连接一次数据库吗
@FlyerJay 一般都是这样,需要用再开一个连接,用完就关,或者使用数据库连接池来管理。
@jimliang 嗯,tks