javascript - Node.js - PostgreSQL (pg):客户端已经连接。您不能重用客户端
问题描述
我只是想编写简单的注册/登录系统。我正在尝试查找用户名是否存在。这是步骤:
- 转到localhost:3000/users/注册页面
- 填写所有字段并单击注册按钮
- 检查我的命令行是否存在用户名,它应该使用 console.log 打印它
到目前为止一切正常。
当我回到注册页面时,我再次填写所有字段并单击注册按钮。然后它在命令行中抛出它:
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)
我不明白,因为在我调用我的方法后我已经结束了我的客户。
register_sql.js:
module.exports.findUserById =(async (username) =>{
try {
await client.connect();
console.log('Connected successfuly');
const result = await client.query("select * from users where username = ($1)", [username]);
console.log(result.rows[0]['username']);
await client.end();
console.log('Client disconnected...');
} catch (err) {
console.log(err);
}
});
我在 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;
谢谢你的帮忙!
解决方案
使用node-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'])
});
});
推荐阅读
- python - 为所有用户安装 Anaconda 并访问 python
- amazon-web-services - AWS:从 EC2 中访问元数据标签时出现问题
- c++ - SystemC undefined Symbol for architecture x86_64
- java - 判断一个列表是否是具有正确顺序的另一个列表的有序子集的函数 c# 或 java
- git - 如何从问题描述链接到来自不同 Github 存储库的 git 提交
- java - 尝试发送好友请求
- regex - 如何在规则中混合 Ruta 类型和正则表达式?
- azure - 使用 SPN 的 CICD 身份验证
- python - 在 Python 中可视化类和方法的关系
- python - python django开票程序,用外键链接并保存两个模型