【问题标题】:Data undefined error on loading of jade pageData undefined error on loading of jade page
【发布时间】:2022-12-02 06:10:38
【问题描述】:

I have an express.js application that returns a list retrieved from a Postgresql database on a Jade webpage. when clicking the link to the webpage I sometimes get an error: 'cannot read properties of undefined.' The weird thing is that this happens only around 50% of the time, the other times it works like intended

TypeError: C:\Users\kaspe\Documents\Trust kalenderapp\views\group-detail.jade:24
    22|              each user in remaining_users 
    23|               option(value=user.Name + ' ' + user.LastName) #{user.Name + ' ' + user.LastName } 
  > 24|         if group_users.data <= 0
    25|            p No users in group    
    26|         else 
    27|           each user in group_users 

Cannot read properties of undefined (reading 'data')
    at eval (eval at exports.compile (C:\Users\kaspe\Documents\Trust kalenderapp\node_modules\jade\lib\index.js:218:8), <anonymous>:430:18)
    at eval (eval at exports.compile (C:\Users\kaspe\Documents\Trust kalenderapp\node_modules\jade\lib\index.js:218:8), <anonymous>:720:22)
    at res (C:\Users\kaspe\Documents\Trust kalenderapp\node_modules\jade\lib\index.js:219:38)
    at Object.exports.renderFile (C:\Users\kaspe\Documents\Trust kalenderapp\node_modules\jade\lib\index.js:380:38)
    at Object.exports.renderFile (C:\Users\kaspe\Documents\Trust kalenderapp\node_modules\jade\lib\index.js:370:21)
    at View.exports.__express [as engine] (C:\Users\kaspe\Documents\Trust kalenderapp\node_modules\jade\lib\index.js:417:11)
    at View.render (C:\Users\kaspe\Documents\Trust kalenderapp\node_modules\express\lib\view.js:135:8)
    at tryRender (C:\Users\kaspe\Documents\Trust kalenderapp\node_modules\express\lib\application.js:640:10)
    at Function.render (C:\Users\kaspe\Documents\Trust kalenderapp\node_modules\express\lib\application.js:592:3)
    at ServerResponse.render (C:\Users\kaspe\Documents\Trust kalenderapp\node_modules\express\lib\response.js:1008:7)

my server side code:

//Create a group detail page
router.get('/details', function (req, res, next) {
  if (req.session.loggedin) {
    var userssql = 'select * from "TrustCalendar"."User" where $1 = any ("User"."Groups")';
    var users_list;
    db.pool.query(userssql, [req.query.group], function (error, results) {
      if (error) {
        throw error;
      }
      users_list = results.rows;
    })

    //get user list of all users not in group
    var users_not_in_group_sql = 'select * from "TrustCalendar"."User" where not $1 = any("User"."Groups")';
    var users_not_in_group_list;
    db.pool.query(users_not_in_group_sql, [req.query.group], function(error, results){
      if(error) {
        throw error;
      }
      users_not_in_group_list = results.rows;
    })

    var sql = 'select * from "TrustCalendar"."Group" where lower("name") = lower($1)'
    db.pool.query(sql, [req.query.group], function (error, results) {
      //create custom object with all needed vars
      res.render('group-detail', { group: results.rows, training_hours: results.rows[0].training_hours, group_users: users_list, remaining_users: users_not_in_group_list });
    })

  } else {
    req.flash('error', 'Please log in!');
    res.redirect('/');
  }

})

my jade template code:

extends layout

block content
    h1 Group detail overview
    h2 #{group[0].name}

    p 
        a(href="/groups/trainings") Trainings 

    p Head of group
        p #{group[0].head_of_group} 
    p Trainers of #{group[0].name} 
      form(action="/groups/addtrainer?group=" + group[0].name, method="post")
        div add a user to #{group[0].name} 
        if remaining_users.length <= 0
          p All users are already in the group
        else 
          select(name="user" multiple='multiple' data-placeholder="Choose user(s)" class="chosen-select" required) 
             each user in remaining_users 
              option(value=user.Name + ' ' + user.LastName) #{user.Name + ' ' + user.LastName } 
        if group_users.data <= 0
           p No users in group    
        else 
          each user in group_users 
            p=user.Name + ' ' + user.LastName
            a(href="/groups/removetrainer?group="+group[0].name + '&user_name=' + user.Name + '&user_lname=' + user.LastName) remove trainer 

I tried changing .length to .data but it does not seem to make any difference. I also made sure that the data that needs to be read is there which is also the case. Does anyone know why the data fails to load half of the time?

【问题讨论】:

    标签: javascript node.js express


    【解决方案1】:

    Try using optional chaining, if it's null if doesn't evaluate what is after ?

    group_users?.data
    

    【讨论】:

      猜你喜欢
      • 2021-11-14
      • 2012-05-12
      • 2021-04-06
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多