Javascript Node.js-PostgreSQL(pg):客户端已连接。不能重复使用客户端
我只是想写一个简单的注册/登录系统。 我正在尝试查找用户名是否存在。以下是步骤:Javascript Node.js-PostgreSQL(pg):客户端已连接。不能重复使用客户端,javascript,node.js,postgresql,express,node-postgres,Javascript,Node.js,Postgresql,Express,Node Postgres,我只是想写一个简单的注册/登录系统。 我正在尝试查找用户名是否存在。以下是步骤: 转到本地主机:3000/用户/注册页面 填写所有字段,然后单击“注册”按钮 检查我的命令行,如果用户名存在,则应使用console.log打印它 到目前为止一切正常。 当我返回到注册页面时,我再次填写所有字段,然后单击注册按钮。然后它将其抛出到命令行: Error: Client has already been connected. You cannot reuse a client. at Client._co
Error: Client has already been connected. You cannot reuse a client.
at Client._connect (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\pg\lib\client.js:91:17)
at C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\pg\lib\client.js:310:10
at new Promise (<anonymous>)
at Client.connect (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\pg\lib\client.js:309:10)
at Object.module.exports.findUserById (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\database\register_sql.js:8:22)
at C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\routes\users.js:37:29
at Layer.handle [as handle_request] (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\express\lib\router\route.js:137:13)
at next (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\express\lib\router\route.js:131:14)
at Route.dispatch (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\express\lib\router\route.js:112:3)
我在users.js中调用register_sql.js这里是users.js:
const router = express.Router();
const registerSQL = require('../database/register_sql');
router.route('/register')
.get((req, res, next) => {
res.render('register');
})
.post((req, res, next) => {
const {
username,
password,
password2
} = req.body;
let errors = [];
if (!username || !password || !password2) {
errors.push("Please fill in all fields!");
}
if (password != password2) {
errors.push("Passwords do not match!");
}
if (password.length < 6) {
errors.push("Password has to be at least 6 characters!");
}
if (errors.length > 0) {
res.render('register', {
errors
});
} else {
registerSQL.findUserById(username);
res.redirect('/');
}
});
module.exports = router;
const router=express.router();
常量registerSQL=require('../database/register_sql');
router.route(“/寄存器”)
.get((请求、恢复、下一步)=>{
res.render(“寄存器”);
})
.post((请求、恢复、下一步)=>{
常数{
用户名,
暗语
密码2
}=请求主体;
让错误=[];
如果(!用户名| | |!密码| |!密码2){
错误。推送(“请填写所有字段!”);
}
如果(密码!=密码2){
错误。推送(“密码不匹配!”);
}
如果(密码长度<6){
错误。推送(“密码必须至少为6个字符!”);
}
如果(errors.length>0){
res.render('寄存器'{
错误
});
}否则{
registerSQL.finduserbyd(用户名);
res.redirect('/');
}
});
module.exports=路由器;
谢谢你的帮助 使用节点postgres(您正在使用的)我只使用池来管理连接
const pg = require('pg')
const pool = new pg.Pool();
pool.connect(function(err, client, done) {
if(err) {
return console.error('connexion error', err);
}
client.query("select * from users where username = ($1)", [username], function(err, result) {
// call `done()` to release the client back to the pool
done();
if(err) {
return console.error('error running query', err);
}
console.log(result.rows[0]['username'])
});
});
使用节点postgres(您正在使用的)我只使用池来管理连接
const pg = require('pg')
const pool = new pg.Pool();
pool.connect(function(err, client, done) {
if(err) {
return console.error('connexion error', err);
}
client.query("select * from users where username = ($1)", [username], function(err, result) {
// call `done()` to release the client back to the pool
done();
if(err) {
return console.error('error running query', err);
}
console.log(result.rows[0]['username'])
});
});
您是否使用ORM?能否在启动服务器的位置共享您的代码?(可能是在启动服务器之前创建了一个客户机)@diegoorellana您好,首先我尝试了Knex.js,但是我不能,从那以后,我尝试在没有ORM的情况下编写。我在app.js中启动服务器。您可以在这里看到:您可以在实例客户端(const client=…)的位置共享代码吗?您也可以尝试删除行client.connect(),因为您在…使用ORM之前创建了连接。您可以在启动服务器的位置共享代码吗?(可能是在启动服务器之前创建了一个客户机)@diegoorellana您好,首先我尝试了Knex.js,但是我不能,从那以后,我尝试在没有ORM的情况下编写。我在app.js中启动服务器。您可以在这里看到:您是否可以共享实例客户端(const client=…)的代码?您还可以尝试删除行client.connect(),因为您之前创建了一个连接…非常感谢。使用游泳池解决了我的问题。非常感谢。使用游泳池解决了我的问题。