我正在尝试从我的数据库中检索一些数据,而且我遇到了一个奇怪的问题。我的服务器端在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子句。
有任何建议可以解决这个问题吗?
答案 0 :(得分:0)
为什么你不使用错误事件?
query.on('error', function(error) {
//handle the error
});
尝试从查询结尾处删除分号。