MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Express Mongoose Model.find() zwraca undefined

Wygląda to poprawnie, ale zapominasz o asynchronicznym zachowaniu JavaScriptu :). Kiedy kodujesz to:

module.exports.getAllTasks = function(){
        Task.find().lean().exec(function (err, docs) {
        console.log(docs); // returns json
    });
}

Możesz zobaczyć odpowiedź json, ponieważ używasz console.log instrukcja WEWNĄTRZ wywołania zwrotnego (funkcji anonimowej, którą przekazujesz do .exec())Jednak, gdy wpiszesz:

app.get('/get-all-tasks',function(req,res){
    res.setHeader('Content-Type', 'application/json');
    console.log(Task.getAllTasks()); //<-- You won't see any data returned
    res.json({msg:"Hej, this is a test"}); // returns object
});

Console.log wykona getAllTasks() funkcja, która niczego nie zwraca (niezdefiniowana), ponieważ rzecz, która naprawdę zwraca dane, których potrzebujesz, znajduje się WEWNĄTRZ wywołania zwrotnego...

Aby to zadziałało, będziesz potrzebować czegoś takiego:

module.exports.getAllTasks = function(callback){ // we will pass a function :)
        Task.find().lean().exec(function (err, docs) {
        console.log(docs); // returns json
        callback(docs); // <-- call the function passed as parameter
    });
}

A my możemy napisać:

app.get('/get-all-tasks',function(req,res){
    res.setHeader('Content-Type', 'application/json');
    Task.getAllTasks(function(docs) {console.log(docs)}); // now this will execute, and when the Task.find().lean().exec(function (err, docs){...} ends it will call the console.log instruction
    res.json({msg:"Hej, this is a test"}); // this will be executed BEFORE getAllTasks() ends ;P (because getAllTasks() is asynchronous and will take time to complete)
});


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Spring boot próbuje połączyć się z mongo po dodaniu zależności maven mongo-java-driver

  2. Wprowadź wartość formularza (format json) do bazy danych za pomocą meteor

  3. Jaka jest różnica między Spring Data MongoDB a Hibernate OGM dla MongoDB?

  4. Czy Python może zapisywać do bazy danych i aktualizować Meteor?

  5. Ciąg projektu agregacji MongoDB do ObjectId