我只是想写简单的注册/登录系统.我试图找到如果用户名存在.这里是步骤:
1.转到localhost:3000/users/register页面
1.填写所有字段并点击注册按钮
1.检查我的命令行,如果用户名存在,它应该打印它与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;
型
谢谢你的帮助!
6条答案
按热度按时间thtygnil1#
使用node-postgres(这是您正在使用的),我只使用池来管理连接。
字符串
vmjh9lq92#
我也遇到了同样的问题,不要在函数外创建新的客户端。
字符串
kgsdhlau3#
我设法在不使用pool的情况下解决了这个问题。也许这不是最正确的解决方案,但它有效。首先创建一个单独的js文件,在其中连接客户端并导出它:
字符串
然后你就可以使用导出的客户端了,它已经连接好了,所以它不会在每次请求时重新连接。一定要从你连接它的js文件中导入客户端。
型
kninwzqo4#
好了,问题发生了,因为你还没有关闭连接到数据库.记住,你必须关闭连接之前,你发送的东西给客户端这样:
字符串
7bsow1i65#
池方法是更好的做法,但如果有人想与客户端方法连接,那么这个解决方案将工作。
代码将与客户端的方法:
字符串
})
hi3rlvi26#
我正在那样做
字符串
然后
型