2013-11-15 3 views
0

Я пытаюсь выяснить, как загрузить пользователя на основе ID с помощью мангуста в приложении узла. Я исхожу из фона php/mysql, и мне сложно понять, как связать все это вместе в node + mongoose. Может ли кто-нибудь помочь мне улучшить/исправить этот пример?загрузить пользователя на основе id с mongoose

модели Модель/user.js

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

var userSchema = new Schema({ 
    facebookProfile: {}, 
    facebookPages: { type: Array }, 
    created: {type: Date, default: Date.now} 
}); 

userSchema.methods = { 
    getManagedPages: function(){ 
     return this.facebookPages; 
    } 
} 

userSchema.statics = { 
    load: function(userid){ 
      return this.findById(userid); 
    } 
} 
module.exports = mongoose.model('User', userSchema); 

в контроллерах контроллера/user.js

var User = mongoose.model("User"); 
var currentUser = new User(); 
currentUser = currentUser.load(req.user._id); 

Ошибка я получаю:

TypeError: Object { _id: 52861322f38d7ded3f000001, created: Fri Nov 15 2013 13:27:14 GMT+0100 (CET), facebookPages: [] } has no method 'load' at exports.profile

ответ

1

Проверить Mongoose Queries и добавьте это в свою модель пользователя

exports.load(userid, callback){ 
    var query = User.findOne({//User is your mongoose.model("User"); variable 
      'userid' : userid 
     }); 
     query.select('userId name email'); 
     query.exec(function(err, result) { 
      if (err) { 
       // Error 
         callback(err); 
      } else { 
       if (result.length == 0) { 
        // User not Exists    
         callback(false, result); 
       } 
       else { 
        // User Exists. Process result 
       } 
      } 
     }); 
} 

EDIT: Обновленный код с обратным вызовом

Изменение CurrentUser = currentUser.load (req.user._id); к функции обратного вызова

currentUser.load(req.user._id, function(err,result){ 
    if(err){//handle err 
    } 
    else{ 
    currentUser = result.userid; 
    } 
}); 

Примечание: Это псевдокод

+0

Спасибо, я могу получить мой пользователя на основе этого синтаксиса, но я не очень нравится, имея весь код базы данных в моих контроллерах и хотел бы переместить его в мои модели, например, в методе «load», как вы можете видеть в моем примере выше. Вы знаете, как я могу переместить эту логику в функцию «load» в моей модели User, как вы можете видеть выше? – Jorre

+0

проверить мой обновленный ответ – Damodaran

+0

Не следует ли использовать статику или функции вместо модели (http://mongoosejs.com/docs/2.7.x/docs/methods-statics.html) или я должен экспортировать каждую функцию вручную, например в вашем примере? – Jorre

Смежные вопросы