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

我只是想写一个简单的注册/登录系统。 我正在尝试查找用户名是否存在。以下是步骤:

  • 转到本地主机:3000/用户/注册页面
  • 填写所有字段,然后单击“注册”按钮
  • 检查我的命令行,如果用户名存在,则应使用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)  
    
    我在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(),因为您之前创建了一个连接…非常感谢。使用游泳池解决了我的问题。非常感谢。使用游泳池解决了我的问题。