【发布时间】:2017-07-08 09:33:54
【问题描述】:
我正在使用 ejs 视图引擎制作我的第一个 Node.js 应用程序。我有两个模型:帖子和用户。我尝试将这两个模型链接在一起,但似乎无法弄清楚如何显示哪些用户发布了哪些帖子!
这是用户模型:
// User Schema
var UserSchema = mongoose.Schema({
username: {
type: String,
index:true
},
password: {
type: String
},
email: {
type: String
},
name: {
type: String
},
facebook : {
id : String,
token : String
},
posts : [{ type: mongoose.Schema.Types.ObjectId, ref: 'Post' }]
});
这是帖子:
// Post Schema
var PostSchema = mongoose.Schema({
user: {type: mongoose.Schema.ObjectId, ref: 'User'},
name: {
type: String,
index:true
},
text: {
type: String
}
});
这是我显示帖子的控制器/路由:
// Post page
router.get('/post', function(req, res){
req.db.collection('posts').find().toArray((err, result) => {
if (err) return console.log(err)
res.render('posts/post', {posts: result, req: req});
})
});
现在
如果我的视图文件中有这个(ejs):
<%posts.forEach(function(element){%>
<li>
<%=element.name%> <br>
<%=element.text%> <br>
<%=element.user.username %>
</li>
<br>
<%});%>
我得到“用户名”的输出为“未定义”
如果我把这个改为:
<%posts.forEach(function(element){%>
<li>
<%=element.name%> <br>
<%=element.text%> <br>
<%=element.user %>
</li>
<br>
<%});%>
我得到的用户名是:d6cf225e(我的用户 ID)。
为什么我不能通过添加“.username”来检索我的用户名?当我添加新帖子时,似乎所有信息都在那里。在我的控制台中,我可以看到正在插入以下消息:
{ __v: 0,
name: 'lol',
text: 'test',
user:
{ _id: d6cf225e,
username: 'Test',
email: 'test@test.se',
name: 'Test',
__v: 0,
posts: [],
facebook:
{ token: 'TOKENNUMBER'
id: '23123123' } },
_id: 2d8afa19fbf6 }
编辑
更新了控制器以填充用户。现在可以了。
// Post page
router.get('/post', function(req, res){
Post.find().populate('user').exec(function(err, result) {
if (err) return console.log(err)
res.render('posts/post', {posts: result});
})
});
【问题讨论】: