Zunächst einmal getNEO()
nicht Rückkehr alles - ich gehe davon aus, dass Sie getNEO()
genau einmal für Ihre query
anrufen, a nd einen Callback übergeben, um die Daten zu verarbeiten, und dieser Callback erhält nicht die richtigen Daten?
Meine typische Empfehlung für die Fehlerbehebung Dinge wie diese ist Ihr Code zu vereinfachen, und versuchen, wirklich nah an jedem Beispielcode zu erhalten gegeben (for instance):
var client = new pg.Client(conString);
// define your callback here, in theory
client.connect(function (err) {
if (err) throw err;
var query = client.query("SELECT count(*) as count FROM sat_scores"),
function(err, result) {
if (err) throw err;
console.log(result.rows.length);
}
);
});
... Ich mache ein paar Dinge hier finden Sie beachten wollen:
- Es sieht aus wie die
client.connect()
Methode asynchron ist - man kann nicht einfach anschließen und dann Ihre Frage gehen laufen, müssen Sie warten, bis die Verbindung hergestellt ist, daher der Rückruf. Beim Durchsehen des Codes sieht es so aus, als könnte es ein connect
-Ereignis ausgeben, wenn es bereit ist, Abfragen zu senden, so dass Sie keinen Callback für die connect()
-Methode direkt verwenden müssen.
- Ich sehe kein
data
Ereignis in the documentation for the query object noch sehe ich eins im Code. Sie könnten das Ereignis row
verwenden, oder Sie könnten einen Rückruf direkt auf der Abfrage verwenden, wie im Beispiel auf der Hauptseite - das habe ich hier aus Gründen der Einfachheit getan.
- Ich sehe die
count
Eigenschaft nicht Sie verwenden, und row[0]
wird nur das erste Ergebnis zu gehen - ich glaube, Sie die length
Eigenschaft wollen im großen und ganzen rows
Array, wenn Sie für die Anzahl der Zeilen suchen zurück .
Ich weiß nicht, ob Sie einen guten Grund haben, die getNEO()
Funktion zu verwenden, wie direkt in prozedural zu setzen Sie den Code dagegen, aber ich denke, Sie eine bessere Annäherung bekommen kann, was man nach wie folgt sind:
var client = new pg.Client(conString);
// define your callback here, in theory
client.connect();
function getNEO(callback) {
client.on('connect', function() {
var query = client.query("SELECT count(*) as count FROM sat_scores"));
query.on('end', function(result) {
callback(result.rowCount);
});
});
}
... so können Sie Ihre getNEO()
Funktion aufrufen, wenn Sie so wollen, es für die Verbindung in geeigneter Weise zu komplettieren werde warten und dann können Sie überspringen jede Zeile Tracking, wie es kommt; Das end
Ereignis empfängt das result
Objekt, das Ihnen alle Zeilen und die Zeilenanzahl gibt, um mit dem zu tun, was Sie wünschen.
wie das 'data' Ereignis Scheint könnte ausgelöst werden? Wird die 'console.log' in Ihrer Konsole angezeigt? –
@FelixKling, scheint wie 'query.on ('data', ...' wird nicht ausgelöst ... änderte die ''data'' zu'' rows' auch, aber das hat auch nicht funktioniert .. – user2061886
Also das ist der Grund, warum der leere Wert übergeben wird. Jetzt müssen Sie herausfinden, wie Sie die Daten tatsächlich erhalten. –