这段代码的执行过程是怎样的? 求助!!

2017-08-18 08:29:30 +08:00
 jtsai

代码 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
1797 次点击
所在节点    问与答
9 条回复
KeepPro
2017-08-18 09:13:31 +08:00
当然是从上到下 从左到右的执行了(滑稽


话说你这是 nodejs?
是的话 你要 exports 的是 pool 和 query 吧,mysql 是你引入的到处也没用啊。
plqws
2017-08-18 09:22:04 +08:00
第二个是每次查询都创建一次连接池啊,第一个是只有一个连接池
jtsai
2017-08-18 09:25:22 +08:00
@KeepPro 嗯 exports = query 写错了
jtsai
2017-08-18 09:27:06 +08:00
@plqws 嗯 那要实现 (基于不同的 mysql 服务器,创建多个链接池,每个操作申请一个链接) 要怎么封装?
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()
})
})
};


这样行吗?
jtsai
2017-08-18 09:52:48 +08:00
@vainly 单例吗?,应该可以
jtsai
2017-08-18 10:02:43 +08:00
@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()
})
})
}
```
vainly
2017-08-18 12:09:25 +08:00
@jtsai pools 不能放在方法内部
yksoft1
2017-08-18 14:50:49 +08:00
一个是对象构造的时候连接数据库,一个是查询一次连接一次数据库吧。明显前者要优于后者,另外你数据库用户名密码写死真的好吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/383851

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX