经过这两天的研究学习到了如下的内容,不一定正确,但是解决了当前问题。
自问自答吧:
1,我觉得是原驱动的Index.js里的代码错了
exports.Client = require('./client');
应该是如下的才对,少了lib/
exports.Client = require('./lib/client');
2,服务不可用时连接错误未能处理,是因为Pool没有把这个错向Client抛出。在Pool的Init方法里,new Connection的下面,先将错抛出:
...
conn.on('error', error);
...
添加error方法处理错误:
var error=function(err){
if(err){
that.emit('error', err);
return;
}
}
...
然后在Client.js就可以捕获这个错了:
this.pool.on('error', (error)=>{
return reject(error);
});
3,用户名密码是错的也能连接到服务,是因为在connection.js的auth方法中,未将验证出错的Err抛出,修改如下:
that.emit('authorized', err, that);
修改pool.js的Init方法的addAuthorizedConnection方法:
var addAuthorizedConnection = function (err, conn) {
if(err){
that.emit('error', err);
return;
}
that.isBigEndian = conn.isBigEndian;
that.authorized.push(conn);
};
至此,当用户名密码验证失败就可以通过error来获取错误信息了。
这也说明了一个问题,即使有用户名密码,通过驱动也是可以直接绕过验证的。
现在将部分驱动API改成了支持await/async的Promise方式,暂时用着挺好的。