亲爱的社区和Vitaly-t先生,
我正在使用pg-promise构建一个网站/服务器,使用postgre角色/组登录进行身份验证。
我不知道我是否做得正确,但我希望每个用户都使用自己的postgres连接查询数据库。
因此在实践中,当每个用户连接时(如果不存在),我为每个用户创建一个连接。 为此,我创建了一个Pool对象,带有一个丑陋的“虚假承诺”和一个pgUser对象:
我正在使用pg-promise构建一个网站/服务器,使用postgre角色/组登录进行身份验证。
我不知道我是否做得正确,但我希望每个用户都使用自己的postgres连接查询数据库。
因此在实践中,当每个用户连接时(如果不存在),我为每个用户创建一个连接。 为此,我创建了一个Pool对象,带有一个丑陋的“虚假承诺”和一个pgUser对象:
var pgPool = function(pg){
var _this=this;
var fakePromise = function(err){
var _this=this;
_this.err=err
_this.then=function(cb){if(!err){cb();return _this}else{return _this};};
_this.catch=function(cb){if(err){cb(_this.err)}else{return _this};};
return _this;
};
_this.check= function(user){
if (_this[user]){
return _this[user].check();
}else{
return new fakePromise({error:'Echec de connection à la base de
données'})
}
}
_this.add = function(user,password){
var c={};
c.host = 'localhost';
c.port = 5432;
c.database = 'pfe';
c.poolSize = 10;
c.poolIdleTimeout = 30000;
c.user=user;
c.password=password
if (!_this[user]){
_this[user] = new pgUser(c,pg);
return _this[user].check();
}else{
_this[user].config.password=password;
return _this[user].check();
};
};
return _this;
};
var pgUser = function(c,pg){
var _this=this
_this.config = c
_this.db = new pg(_this.config)
_this.check = function(){
return _this.db.connect();
};
return _this;
};
以下是我在登录POST处理期间将用户添加到“池”中的方法:
pool.add(req.body.user,req.body.password).then(function(obj){
obj.done();
req.session.user = req.body.user;
req.session.password = req.body.password;
res.redirect("/");
return;
}).catch(function(err){
options.error='incorect password/login';
res.render('login', options);
return;
});
我相信这可能会激怒专业的开发人员,如果您能解释一下最好的方法,那么您将是友善的:
- 每个用户对数据库只有一个连接是否是个好主意(看起来确实可以提高安全性)?
- 我该如何更好地使用pg-promise库,以避免使用这个丑陋的自定义“池”对象?
非常感谢。