Node.js 关于使用node postgres和render page在node js中回调的问题

Node.js 关于使用node postgres和render page在node js中回调的问题,node.js,postgresql,node-postgres,Node.js,Postgresql,Node Postgres,我有一个postgresql,其中有一个usersusername、密码e administrator或oolean表。一旦我让我的查询从username=$1和password=$2的用户中选择*后,我想检查administrator是否等于true,然后重定向到administrator页面,如果为false,则重定向到normalClient页面。 我很难理解回调。第一个可以接收错误或结果,但是如果我接收到结果,我需要检查administrator==true,然后重定向到admin页面,

我有一个postgresql,其中有一个usersusername、密码e administrator或oolean表。一旦我让我的查询从username=$1和password=$2的用户中选择*后,我想检查administrator是否等于true,然后重定向到administrator页面,如果为false,则重定向到normalClient页面。 我很难理解回调。第一个可以接收错误或结果,但是如果我接收到结果,我需要检查administrator==true,然后重定向到admin页面,否则重定向到client页面

    router.post('/login',(req,res,next)=> {
      let text = 'SELECT * FROM users WHERE username=$1 AND password=$2';
      let values = [req.body.username,req.body.password];
     //callback
     //make query
      pool.query(text, values, (err, res) => {
      // if error print
      if (err) {
        console.log(err.stack)
        //if receive result print 
      } else {
        console.log(res.rows[0].administrator)
        // { name: 'brianc', email: 'brian.m.carlson@gmail.com' }
      }
    });

    res.redirect('/adminDashboard');
  });


我认为,您需要在pool.query函数的回调函数内部进行重定向。

关于您的specefic问题,您需要移动res.redirect'/adminDashboard';在你的else街区里。在阅读之前的评论时,我发现您在多个位置使用res变量-router.post'/login',req,res,next=>{和pool.querytext,values,err,res=>{。在任意位置调用res以外的值

由于您提到您在理解回调时遇到困难,这里有一点介绍。每当您在Javascript中执行函数时,您都需要检查该函数是同步运行还是异步运行。如果是异步的,就像函数pool.query一样,您需要提供一个回调—本质上是另一个需要在n从原始方法获取数据

当Javascript开始执行代码时,它将调用pool.query方法,但它不会等待结果!相反,它将执行res.redirect'/adminDashboard';代码行。这就是您需要在回调中移动这一行的原因

这就是Javascript的美妙之处。让方法异步运行可以加快整个程序的速度,因为现在你的线程没有空闲。它不会等待结果,而是执行下一个操作。当你的原始方法完成并返回数据时,它会返回并执行回调函数

使现代化
根据您的评论,如果您像这样重命名池中的res,pool.querytext,values,err,queryRes=>{,您仍然可以执行res.redirect'/adminDashboard';在else块中,因为您仍然可以访问父res变量。

我已经尝试过,但在回调res.redirect中不是一个函数,因为res是关于池的。queryWell,您可以在池的回调中使用不同的变量名称。query:poolErr、poolRes和res将是变量您需要我知道了,但是如果我在“queryRes”中更改pool.query中的“res”,我就不能进行“queryRes.redirect”。它不是express的函数,而是pool.query的函数。我如何检查我的管理员是否为===true?queryRes变量将包含所有用户信息,您可以在else块下检查admin是否为。谢谢太多了,你让我开心了。我知道我可以使用parent res变量。