【发布时间】: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