MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Express Mongoose Model.find () trả về không xác định

Điều đó có vẻ đúng, nhưng bạn đang quên về hành vi không đồng bộ của Javascript :). Khi bạn viết mã này:

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

Bạn có thể thấy phản hồi json vì bạn đang sử dụng console.log hướng dẫn BÊN TRONG cuộc gọi lại (hàm ẩn danh mà bạn chuyển đến .exec ()) Tuy nhiên, khi bạn nhập:

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 sẽ thực thi getAllTasks() hàm không trả về bất kỳ thứ gì (không xác định) bởi vì thứ thực sự trả về dữ liệu mà bạn muốn là BÊN TRONG lệnh gọi lại ...

Vì vậy, để nó hoạt động, bạn sẽ cần một cái gì đó như sau:

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

Và chúng ta có thể viết:

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. Làm cách nào để RegisterClassMap cho tất cả các lớp trong một không gian tên cho MongoDb?

  2. Làm cách nào để sắp xếp theo nhiều trường trong mongodb với Perl?

  3. Nhận tài liệu con gần đây nhất từ ​​Array

  4. Không thể xóa, xóa, bỏ mongodb khỏi debian

  5. Cách đặt trường mongo từ biến