2013-07-03 6 views
6

Problemi di ottenere risultati da query SELECT in nodo-postgres. Ora le righe sono vuote alla fine del codice. Questa selezione restituisce solo un valore successivo da una sequenza in POSTGRESQL. So che non è possibile recuperare i risultati dalla richiamata, ma c'è qualcuno qui che ha utilizzato il nodo-postgres (o qualsiasi altro modulo di database sul nodo) che potrebbe conoscere una correzione?Restituzione del risultato da SELECT con node-postgres

client.connect(); 
var query = client.query("SELECT nextval(\'idgenerator\');"); 
var rows = []; 
query.on('row', function(row, res) { 
    rows.push(row); 
}); 
query.on('end', function(result) { 
    console.log(result.rowCount + ' rows were received'); 
}); 
//client.end(); 
console.log(rows); 

risposta

5

Dovrai imparare javascript/nodejs e programmare eventi.

query.on('row', function() { /*CODE*/ }) significa: "quando viene letta una riga, eseguire il CODICE".

Questo è asincrono; quindi query.on() registra l'evento e restituisce.

So when console.log(rows) viene chiamato, le righe sono ancora vuote, perché nessun evento 'riga' è stato attivato su query, ancora.

Si dovrebbe provare a mettere 'console.log (righe)' nel corpo del gestore di eventi query.on ('end').

Ovunque nel codice, inoltre, è necessario scrivere console.log. Lo vedi la cosa asincrona.

+1

Grazie. Dovevo solo capire pienamente i callback in javascript. – magnudae

4

Se non abbiamo chiamato il metodo result.addRow(), l'array di righe sarebbe vuoto nell'evento di fine.

var query = client.query("SELECT firstname, lastname FROM emps ORDER BY lastname, firstname"); 

query.on("row", function (row, result) { 
    result.addRow(row); 
}); 

query.on("end", function (result) { 
    console.log(JSON.stringify(result.rows, null, " ")); 
    client.end(); 
}); 

Rif: http://nodeexamples.com/2012/09/21/connecting-to-a-postgresql-database-from-node-js-using-the-pg-module/

+0

è possibile restituire una matrice di righe in una variabile invece di mostrare nella console? –

+1

nel listener "fine", è possibile restituire il risultato tramite 1. richiamare una funzione di richiamata - che aggiornerà la risposta ai socket richiesti (utilizzando socket.io) ex: callback (risultato); 2. utilizzo della libreria "q" es .: var q = require ('q'); ... // attendere i dati della query \ n queryDb (params) .then (funzione (dati) { }); ... var queryDb = function (args) { var deferred = q.defer(); ... query.on ('fine', funzione (risultato) { deferred.resolve (result.rows); }); return deferred.promise; } – abdulwadood

+0

Grazie per l'attenzione, ho trovato enormi js –

Problemi correlati