Handlebars js从嵌套对象访问一个元素

时间:2017-01-05 23:16:22

标签: javascript node.js express handlebars.js

我有一个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。

我该怎么办?感谢。

2 个答案:

答案 0 :(得分:0)

find()方法将返回文档列表。这就是你得到的原因 (摘自上面的评论):object[{"_id":"586abcad062b2b1254bb5303","name":"Test3423","‌​description":"","dep‌​artmen tName":"Test3","__v":0,"departmentId":["5864345ef7834d3fc07d‌​8d6c"]}]。这是一个你内部模型的数组。

使用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/

快乐编码:)