2016-07-21 36 views
0

Ich versuche, einige Daten aus meiner Datenbank abrufen, und ich habe ein seltsames Problem. Meine Server-Seite ist in Node.js, und ich benutze 'Pg' Modul für die Verbindung zu Postgres und 'Express' für das Routing.POST-Anfrage gibt immer den Status 502 während der Abfrage von Postgres

Server-Side-Code:

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(); }); 
    } 
}); 

Nun, wenn die erste Abfrage 1 zurückgibt, wird der else-Block ausgeführt und alles geht in Ordnung. Wenn es stattdessen 0 zurückgibt, erhalte ich immer den Status 502 (Schlechtes Gateway).

Wenn ich ändern:

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

zu:

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

dieser Fehler verschwindet, wie es auf den Parameter in Beziehung gesetzt werden sollte. Ich versichere, dass diese Variable korrekt ist, sie enthält die richtigen Informationen. BTW, wenn ich die obige Abfrage zu ändern:

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

habe ich noch den gleichen Fehler, so ist es nicht wegen der OR-Klausel.

Jeder Vorschlag, um dieses Problem zu umgehen?

Antwort

0

Warum verwenden Sie kein Fehlerereignis?

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

Versuchen Sie, Semikolon vom Ende der Abfrage zu entfernen.

+0

Semikolon entfernt, gleiche Ausgabe. Ich gehe normalerweise mit Fehlern um, aber wie kann dies in dieser Situation helfen? –

+0

Ich vermutete Abfrage sintax, aber jetzt denke ich, dass das Problem in "res.send". Wie viele Zeilen zählen die Abfragen zurück? SELECT x, y, z FROM myTabelle WHERE z = $ 1 OR t = FALSCHE ORDER BY y; '/' SELECT x, y, z VON meiner Tabelle WHERE z = $ 1 ORDER BY y; 'und' SELECT x, y, z VON meiner Tabelle WHERE t = FALSCHE ORDER BY y; ")'? –