我有一个nodejs应用程序。我使用把手js作为视图引擎。我试图从嵌套对象中访问一个元素,我将其传递给hbs视图。
router.get('/view_users/:id', function (req, res, next) {
Users.find({ userId: req.params.id }, function (err, users) {
if (err) {
throw err;
} else {
res.render('view_user', { title: 'Users', user: users});
}
})
});
然后在view_user中我只想访问一个users.name。<p>{{users.name}}</p>
(没有内置帮助程序,例如#each,因为它会返回所有用户的列表)
我尝试了{{user.name}}
,{{name}}
和{{{user.name}}},但它返回了我未定义的内容。
用户是mongoose Schema。
我该怎么办?感谢。
答案 0 :(得分:0)
find()
方法将返回文档列表。这就是你得到的原因
(摘自上面的评论):object[{"_id":"586abcad062b2b1254bb5303","name":"Test3423","description":"","departmen tName":"Test3","__v":0,"departmentId":["5864345ef7834d3fc07d8d6c"]}]
。这是一个你内部模型的数组。
使用findOne
方法,它将直接返回用户文档。您使用userId发出请求,因此您将始终获得良好的文档。
您可以从文档中了解更多信息:http://mongoosejs.com/docs/queries.html
在Mongoose中将回调传递给查询的任何地方,回调都遵循模式
callback(error, results)
。结果取决于操作:对于findOne()
,它是一个可能为空的单个文档,find()
文档列表,count()
文档数量,update()
数字受影响的文档等。模型的API文档提供了有关传递给回调的内容的更多详细信息。
另一个解决方案是获取users数组的第一个元素:
res.render('view_user', { title: 'Users', user: users[0] });
希望它有所帮助。
答案 1 :(得分:0)
如果要搜索特定用户,请使用findOne,它将提供用户对象。其中find将返回一组用户/用户。
试试这个:
router.get('/view_users/:id', function(req, res, next) {
Users.findOne({ userId: req.params.id }, function(err, user) {
if (err) {
throw err;
} else {
res.render('view_user', { title: 'Users', user: user });
}
})
})
或
如果您只有一个用户(不建议用于多个用户集),请使用数组的第一个元素。
res.render('view_user', { title: 'Users', user: users[0]});
或
在视图中迭代(推荐用于多个用户列表)
{{#each this}}
{{name}}
{{/each}}
这是一个简化的小提示,用于展示我所问的内容:http://jsfiddle.net/KPCh4/2/
快乐编码:)