【问题标题】:load a user based on id with mongoose使用 mongoose 根据 id 加载用户
【发布时间】:2013-11-28 19:20:12
【问题描述】:

我试图弄清楚如何在节点应用程序中使用 mongoose 加载基于 ID 的用户。我来自 php/mysql 背景,我很难弄清楚如何在 node+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);

在控制器 controllers/user.js 中

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

我得到的错误是:

TypeError: Object { _id: 52861322f38d7ded3f000001,创建时间:11 月 15 日星期五 2013 13:27:14 GMT+0100 (CET),facebookPages: [] } 没有“加载”方法 在exports.profile

【问题讨论】:

    标签: mongoose


    【解决方案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
                    }
                }
            });
    }
    

    编辑:使用回调更新代码

    改变 currentUser = currentUser.load(req.user._id); 到回调函数

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

    注意:是伪代码

    【讨论】:

    • 谢谢,我可以根据该语法获取我的用户,但我真的不喜欢在我的控制器中拥有所有数据库代码,并希望将其移动到我的模型中,例如在方法中正如您在上面的示例中看到的那样,称为“加载”。如上所示,您知道如何将该逻辑移至我的用户模型中的“加载”函数吗?
    • 我们不应该在模型上使用静态或函数(mongoosejs.com/docs/2.7.x/docs/methods-statics.html)还是应该像您的示例中那样手动导出每个函数?
    • 你可以使用静态函数。我只是提供了基本结构
    • 我知道,非常感谢,代码可以工作。但是,我正在寻找一种方法,通过使用静态或函数,使其从模型中工作,就像我上面的原始问题一样.有没有办法告诉我该怎么做?我会按原样标记您的答案,但它没有说明为什么静态或函数在模型中不起作用,而这正是我想用我的问题解决的问题。我希望你明白!感谢您的帮助,它已经澄清了很多。
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-10
    • 2020-08-21
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多