【发布时间】:2014-11-27 23:17:25
【问题描述】:
我已经尝试解决这个问题大约 4 个小时了,但我找不到解决它的方法。我有 3 个模型,看起来像这样:
第一个是我的锦标赛模型:
var tournamentSchema = mongoose.Schema({
tournamentName: String,
nrOfPlayers: String,
players: [{
type: mongoose.Schema.Types.ObjectId, ref: "User" }],
openForLeagues: {
"leagues" : []
},
organizer: [{
type: mongoose.Schema.Types.ObjectId, ref: "User"
}]
});
第二个是我的用户模型:
var userSchema = mongoose.Schema({
local : {
nickname: String,
battlenetid: String,
email: String,
password: String,
race: String,
league: String,
role: String,
website: String,
avatarImage: String,
tournaments: [{
type: mongoose.Schema.Types.ObjectId, ref: "Tournament"
}],
avatar: [{
type: mongoose.Schema.Types.ObjectId, ref: "Avatar"
}]
}
});
第三个是我的头像模型:
var avatarSchema = mongoose.Schema({
imageName: String,
imageRaceCategory: String,
imagePath: String
});
我要做的是根据它的 id 找到一个锦标赛,然后填充玩家数组以及参加这个锦标赛的每个玩家的头像。但是,当我尝试为玩家显示头像时,我变得不确定。
这是我的查询的样子:
Tournament.findById(req.params._id).populate('players organizer players.local.avatar').exec( function(err, tournament){
if(err){
res.send(err)
}else{
helperFunctions.getUserDetails(req.params.userId, function(user){
res.render('tournament/tournament-details.ejs',{
user: req.user,
tournament: tournament,
userAvatar: user,
moment: moment,
enlistedInTournament: enlistedInTournament,
eligibleForTournament: eligibleForTournament,
allPlacesTaken: allPlacesTaken,
procentajOcupare: (tournament.players.length * (100 / tournament.nrOfPlayers))
});
});
}
});
这就是我在视图中显示它的方式:
<%tournament.players.forEach(function(player){%>
<img src="<%=player.local.avatar.imagePath + '/' + player.local.avatar.imageName"%>/>
<li>
<%= player.local.nickname + ', ' + player.local.race + ', ' + player.local.league%>, <a href="/profile-details/<%= player._id%>">Profil jucator</a>
</li>
<%});%>
但是,我没有为 avatar.imagePath 和 avatar.imageName 定义,其他一切正常。有一个更好的方法吗?我错过了什么/做错了什么?提前谢谢!
【问题讨论】:
标签: node.js express mongoose ejs