2012-09-11 25 views
5

Sto lavorando a un progetto NodeJs per la prima volta. E ora sono bloccato con la funzione che restituisce i valori tramite JS e ottiene valori da usare in espresso.restituire valori come non definiti nel nodo

var dbitems = "before fn"; 
function refreshData(callback) { 
     db.open(function (err, db) { 
      if (!err) { 
       db.collection('emp').find().toArray(function (err, items) { 
        dbitems = items; 
        callback(JSON.stringify(items)); 
       }); 
      } 
      else { 
       console.log("Could not be connnected" + err); 
       dbitems = {"value":"not found"}; 
      } 
     }); 

    } 
} 


refreshData(function (id) { console.log(id); }); 

Questa funzione recupera perfettamente i valori da refreshData e scrive nella console. Ma quello che mi serve è quello di utilizzare il valore recuperato per inviare in file html espressa da questa funzione "returnedData"

exports.index = function (req, res) { 
    var valrs = refreshData(function (id) { 
     console.log(JSON.parse(id)); ---this again writes data perfectly in the console 
    }); 
    console.log(valrs); -------------------but again resulting in undefined 
    res.render('index', { title: 'Express test', returnedData: valrs }); 
}; 

Qualsiasi aiuto sarebbe apprezzato.

Grazie & Cordiali saluti, Luckyy.

risposta

5

È necessario eseguire il rendering dopo che la richiesta del database è terminata .. quindi è necessario richiamare dall'interno del callback.

exports.index = function (req, res) { 
    refreshData(function (id) { 
     res.render('index', { title: 'Express test', returnedData: JSON.parse(id) }); 
    }); 
}; 

è asincrono quindi non è possibile inserire solo i valori in ordine, deve passare attraverso i callback.

+0

Ecco, grazie Agreco. Al punto di risposta e molto apprezzato. – Luckyy