0

オブジェクト ( )job.creatorの仮想属性を入力して使用し、ジョブの作成者に公開情報のみを提供しようとしています。Useruser.profile

/**
 * User Schema
 */
var UserSchema = new Schema({
    favorites: {
        jobs: [{ type: Schema.ObjectId, ref: 'Job', index: true }]
    }
});

// Public profile information
UserSchema
.virtual('profile')
.get(function () {
    return {
        favorites: this.favorites,
        profileImageUrls: this.profileImageUrls //also not being populated
    };
});


UserSchema
.virtual('profileImageUrls')
.get(function(){
    var  defaultUrl = cfg.home + '/images/cache/default-profile-img.png'
        , smallUrl = cfg.home + '/images/cache/default-profile-img-small.png';

    return {
        small: smallUrl
        , default: defaultUrl
    };
});


/**
 * Job Schema
 */
var JobSchema = new Schema({
    creator: { type: Schema.ObjectId, ref: 'User', index: true, required: true },
});

.profileオブジェクトから仮想属性を取得しようとすると、job.creatorいくつかの値が不足しています:

//controller
Job.populate(job, { path: 'creator', select: '-salt -hashedPassword' }, function(err, job){
    if ( job.creator ) {
        job.creator = job.creator.profile; //this is missing some attributes
    }

    return res.json(job);
})


{
    //...
    creator: {
        favorites: {
            jobs: [ ] //this is not being populated
        }
    }
}

job.creator.profileImageUrlsUser オブジェクトの仮想属性であるそれも欠落しています。

4

2 に答える 2

0

この行を実行しないことをお勧めjob.creator = job.creator.profileします。これは、Mongoose の動作にうまく適合しません。また、どこprofileImageUrlsから来ていますか?スキーマに含まれていないようです。

于 2014-07-14T15:01:55.297 に答える
0

これが望ましいかどうかはわかりませんが、次のように動作するようになりました。

_.each(jobs, function(job, i){
    if ( job.creator ) {
        job._doc.creator = job.creator.profile;
    }
});

res.json(jobs);
于 2014-07-15T03:14:10.277 に答える