JavaScript 可变参数函数使用技巧
0x01前言
在对node mysql 进行封装的时候,我发现query方法是一个可变参数函数。想要对query函数进行封装,就需要使用JavaScript可变参数函数的定义技巧。
这是mysql库中query的使用方式
connection.query(addSql,addSqlParams,function (err, result){
//回调函数
})
其中,第二个参数也就是sql语句中的动态变量数组是可以省略的。
connection.query(addSql,function (err, result){
//回调函数
})
0x02 封装
封装的目的
在使用mysql时,我发现在没有请求一定时间以后,mysql服务器会自动断开连接并抛出错误。为了解决这个问题,我将封装query函数,在每一次请求mysql的同时进行mysql的连接和断开操作。经过测试可以有效的避免连接断开的问题。
封装方法
在mysql请求js文件的同级目录创建mysqlPool.js文件,代码如下
const mysql = require('mysql');
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'jin7422373',
port: '3306',
database: 'wxdy'
})
const query = function(sql, callback) {
pool.getConnection(function(err, conn) {
if(err){
callback(err, null, null);
}else{
conn.query(sql, function(err, res, fields) {
callback(err, res, fields)
})
conn.release();
}
})
}
module.exports = query;
其中抛出query函数以供外界调用。为了符合query的可变参数格式。对query函数参数进行修改:
const mysql = require('mysql');
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
password: 'jin7422373',
port: '3306',
database: 'wxdy'
})
const query = function() {
let sql, params, callback;
sql = arguments[0]
switch (arguments.length){
case 2: {
callback = arguments[1];
params = null;
break;
}
case 3: {
callback = arguments[2];
params = arguments[1];
break;
}
default: {
break;
}
}
pool.getConnection(function(err, conn) {
if(err){
callback(err, null, null);
}else{
conn.query(sql, params, function(err, res, fields) {
callback(err, res, fields)
})
conn.release();
}
})
}
module.exports = query;






网友评论