在查询Postgres时,POST请求始终给出状态502

时间:2016-07-21 10:32:51

标签: sql node.js postgresql where pg

我正在尝试从我的数据库中检索一些数据,而且我遇到了一个奇怪的问题。我的服务器端在Node.js中,我使用'pg'模块连接到postgres,并'express'用于路由。

服务器端代码:

router.post('/', function(req, res) {
    if (auth.hasValidSession(req)){
         var userc=auth.getUsername();//get current logged in user
         var client = new pg.Client(conString);
         client.connect();
         var superuser=client.query("SELECT superuser FROM Users WHERE username=$1;", [userc]);
        superuser.on('row', function(row){ 
            if(row.superuser==0){
                var query=client.query("SELECT x, y, z FROM myTable WHERE z=$1 OR t=FALSE ORDER BY y;", [userc]);
                query.on('row', function(row, result){
                    result.addRow(row);
                });
                query.on('end', function(result){
                    res.send(result);       
                });
            }else{
                var query=client.query("SELECT x, y, z FROM myTable ORDER BY y;");
                query.on('row', function(row, result){
                    result.addRow(row);
                });
                query.on('end', function(result){
                    res.send(result);       
                });
            }
        });
        superuser.on('end', function(){ client.end(); });
    }
});

现在,如果第一个查询返回1,则执行else块并且一切正常。如果它返回0,我就会获得状态502(Bad Gateway)。

如果我改变:

var query=client.query("SELECT x, y, z FROM myTable WHERE z=$1 OR t=FALSE ORDER BY y;", [userc]);

为:

var query=client.query("SELECT x, y, z FROM myTable WHERE t=FALSE ORDER BY y;");

此错误消失,因为它应与参数相关。我保证该变量是正确的,它包含正确的信息。 顺便说一句,如果我将上述查询更改为:

var query=client.query("SELECT x, y, z FROM myTable WHERE z=$1 ORDER BY y;", [userc]);

我仍然有同样的错误,因此不是因为OR子句。

有任何建议可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

为什么你不使用错误事件?

query.on('error', function(error) {
  //handle the error
});

尝试从查询结尾处删除分号。