代码 1 和代码 2 的一样的吗?
如果想实现代码 2 的想法 (基于不同的 mysql 服务器,创建多个链接池,每个操作申请一个链接) 要怎么封装?
代码 1
'use strict'
const mysql = require('mysql')
const pool = mysql.createPool({
host: '127.0.0.1',
port: '3306',
user: 'root',
password: ''
})
const query = function(sql,callback) {
pool.getConnection(function(err,connection){
connection.query(sql,function(err,results){
callback(err, results)
connection.release()
})
})
}
module.exports = mysql
代码 2
'use strict'
const mysql = require('mysql')
const query = function(sql,callback, host = '127.0.0.1') {
const pool = mysql.createPool({
host: host,
port: '3306',
user: 'root',
password: ''
})
pool.getConnection(function(err,connection){
connection.query(sql,function(err,results){
callback(err, results)
connection.release()
})
})
}
module.exports = mysql
1
KeepPro 2017-08-18 09:13:31 +08:00 via Android 1
当然是从上到下 从左到右的执行了(滑稽
话说你这是 nodejs? 是的话 你要 exports 的是 pool 和 query 吧,mysql 是你引入的到处也没用啊。 |
2
plqws 2017-08-18 09:22:04 +08:00 1
第二个是每次查询都创建一次连接池啊,第一个是只有一个连接池
|
5
vainly 2017-08-18 09:43:35 +08:00
let pools = {};
let testPool = (sql, host) => { let pool = null; if(host && !pools.hasOwnProperty(host)){ pool = mysql.createPool({ host: host, port: '3306', user: 'root', password: '' }); pools[host] = pool; }else{ pool = pools[host]; } pool.getConnection(function(err,connection){ connection.query(sql,function(err,results){ callback(err, results) connection.release() }) }) }; 这样行吗? |
7
jtsai OP @vainly
大佬,你的意思是这样吗? ``` let query = function(sql,callback, host = localhost) { let pools = {} if (!pools.hasOwnProperty(host)) { pools[host] = mysql.createPool({ host: host, port: '3306', user: 'root', password: '' }) } pools[host].getConnection(function(err, connection){ connection.query(sql,function(err, results){ callback(err, results) connection.release() }) }) } ``` |
9
yksoft1 2017-08-18 14:50:49 +08:00 1
一个是对象构造的时候连接数据库,一个是查询一次连接一次数据库吧。明显前者要优于后者,另外你数据库用户名密码写死真的好吗?
|