2016-04-11 15 views
0

Mongoose ilenumaramdan find numaralı çağrıma geri dönüyorum. Benim ihracat dosyasında benim sonucu kaydedilen, ancak benim Projects.find çağrı dışında basit bir dize döndürürseniz çalışacaktır.Module.exports, Mongoose çağrısı ile tanımsız bir şekilde döndürülüyor

req & res'u geçiyorum ve bunlar benim dosyamda doğru bir şekilde kaydedildiler, bu yüzden sorunla ilgili bir şeyleri olduğunu düşünmeyin. Herhangi bir fikir yanlış giden nedir?

routes.js

var proj = require('./exports/projects'); 

app.use(function(req, res, next){ 
    //repsonse: undefined 
    console.log('response: ' + proj.test(req, res)); 
    next(); 
}); 

ihracat/projects.js

var Projects = require('../models/projects'); 

module.exports = { 
    test: function(req, res) { 
     Projects.find({'owner':req.user.id}, function(err, result) { 
       if (err) return '1'; 
       if (!result) 
        return null; 
       else 
        return result; 
     }); 
    } 
}; 

modeller/projects.js

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var shortid = require('shortid'); 

var Projects = new Schema({ 
     projectid: String, 
     pname: { type: String, required: true, trim: true }, 
     owner: { type: String, required: true, trim: true }, 
     status: { type: String, default: '0' }, 
     team: String, 
     archived: { type: Boolean, default: '0' }, 
     created_at: Date 
}); 

Projects.pre('save', function(next) { 
    var currentDate = new Date(); 
    this.created_at = currentDate; 
    this.projectid = shortid.generate(); 
    next(); 
}); 

module.exports = mongoose.model('Projects', Projects); 

cevap

2

O kaynaklanmaktadır Project.find() yönteminin asenkron doğası. Bir süre sonra tamamlanan eşzamansız işlevde bir değer döndürmeye çalışıyorsunuz. Böylece, console.log('response: ' + proj.test(req, res));'da proj.test(req, res) yürütülürken, dönüşte tanımsız değer alır.

Çözüm find operasyon bittikten sonra işletilirse bir geri çağırma işlevi, geçmek gerekiyor.

routes.js

app.use(function(req, res, next){ 

    proj.test(req,res,function(result){ 
     console.log('response',result); 
    }); 
    next(); 
}); 

ihracat/projects.js

module.exports = { 
    test: function(req, res, cb) { 
     Projects.find({'owner':req.user.id}, function(err, result) { 
       if (err) return cb(1); 
       if (!result) 
        return cb(null); 
       else 
        return cb(result); 
     }); 
    } 
}; 
+0

Güzel cevap teşekkürler, ben onunla bir ilgisi vardı biliyordum ama ihracatla benzer bir durum vardı ve bunun için bir geri çağırma gerektirmemiş gibi görünüyordu, ancak bunun yerine bir sayfa oluşturulmuş olması gerekiyordu. Kapsamlı cevap için tekrar teşekkürler! – Aotik