【问题标题】:Express: How to send multiple records to the view and access itExpress:如何将多条记录发送到视图并访问它
【发布时间】:2016-01-17 11:02:44
【问题描述】:

我正在使用MongoExpress 中开发一个应用程序。我要做的就是从db中读取多个records并发送给view。那里我必须rendertable 中的那些。这是,我到目前为止所做的:

我的router:

router.route('/dashboard').get(function (req, res, next) {
    res.format({
        html: function () {
            mongoose.model('Register').find({'userid': req.session.email}, function (err, users) {
               var userMap={};
               users.forEach(function(user){
                  userMap[user._id]=user; 
               });
               res.json(userMap);
            });
        }
    });
});

这是我在视图中看到的:

我想像这样在视图中渲染它:

table
  tbody
    tr
      td #{user.pid}
      td #{user.sid}
      td #{user.rfname}
      td #{user.des}

我提到了this,但它没有说明如何访问view 中的每个record?有什么帮助吗?

【问题讨论】:

    标签: node.js mongodb express


    【解决方案1】:

    将 res.send() 替换为 res.json(),这样你就可以看到 json 对象了。

    【讨论】:

    • 但是如何访问view中的每个record
    • 我这样做了,它返回 json 对象,但没有在视图中正确呈现它。
    • 你能贴出你得到的代码 sn-p 并举例说明你想如何显示它吗?
    • 好吧,您的数据在对象中。您现在要做的就是遍历每条记录并输出您想要的数据。
    • 我知道,但是怎么做呢?因为它不渲染表格。
    【解决方案2】:

    改为这样尝试,这样您就可以将所有数据放入用户对象 res.json({user:userMap});这样您就可以使用用户对象来访问它。所以使用该对象来访问像 user[0].pid

    这样的元素
    router.route('/dashboard').get(function (req, res, next) {   
      mongoose.model('Register').find({'userid': req.session.email},function (err, users) { 
      var userMap={}; 
      users.forEach(function(user){ 
        userMap[user._id]=user; 
      });
      res.render('myviewname',{user:userMap});
      }); 
    });
    

    【讨论】:

    • 我按照你说的试了试,结果一样... :(
    • 你能把你得到的完整的json对象视图贴出来吗?
    • 您还发送一个数组对象来查看。所以使用对象来访问像 user[0].pid,.. 像循环这样的元素。
    • 我已经在问题中发布了,问题是,它执行上图中的操作,而不是我希望它在视图中访问。
    • router.route('/dashboard').get(function (req, res, next) { mongoose.model('Register').find({'userid': req.session.email }, function (err, users) { var userMap={}; users.forEach(function(user){ userMap[user._id]=user; }); res.render('myviewname',{user:userMap}) ; }); });
    【解决方案3】:

    如果您使用 express 生成器或类似的 dir 结构,您可以将数据从控制器传递到视图作为对象,并使用 for 循环遍历每条记录并在视图中打印。检查以下示例以获得更好的想法:

    routes/users.js(控制器文件)

    /* GET users listing. */
    router.get('/', async (req, res) => {
       const userData = await UserModel.find({}); // I'm using mongoose schema and model
       res.render('user', {userData: userData}); 
    });
    

    views/user.jade(查看文件)

    table(border='1')
        tbody
        tr
            th First Name
            th Last Name
            th Email
            th Phone
        for user in userData
            tr
                td #{user.firstName}
                td #{user.lastName}
                td #{user.email}
                td #{user.phone}
    

    这是我的数据:

    [{ "_id" : ObjectId("5f9665e318ec5a064a7ae4ad"), "firstName" : "Anil", "lastName" : "Raj", "email" : "anil@gmail.com", "phone" : "7861171771", "password" : "123456" },                                                                                                                                                   { "_id" : ObjectId("5f966eb518ec5a064a7ae4ae"), "firstName" : "Arun", "lastName" : "Raj", "email" : "arun@gmail.com", "phone" : "7861171773", "password" : "123456" }]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 2021-04-14
      • 1970-01-01
      • 2022-01-23
      • 2017-02-24
      相关资源
      最近更新 更多