Когда я запускаю свой сервер узла, я получаю ошибку типа: не могу прочитать имя свойства undefined. Я могу использовать console.info user_data.name до тех пор, пока не выполню console.info("tt3"+user_data.name). Тогда он просто говорит tt3undefined.
Несмотря на то, что я могу выполнить console.info user_data.name, я все еще получаю сообщение «Не могу прочитать имя» свойства undefined при первом запуске um.getUser();
Я совершенно потерялся в том, в чем проблема.
Я считаю, что мои функции также работают правильно.
Когда я console.info(user_data.name), он печатает имя
router.get('/users/game', function(req, res){
var user_data = {
name: req.query.player_name,
password: req.query.password
};
console.info("does this exist"+user_data.name);
if (user_data.name != = "" && user_data.password !== ""){ //if the password and username aren't blank
//console.info(user_data.name);
um.getUser(user_data.name, user_data.password, function(response){
var userinfo = response;
exports.logplayer = userinfo;
//console.info("tt" +user_data.name);
//console.info(exports.logplayer);
if (exports.logplayer == null){ //if the username and password dont exist
// console.info("tt2" +user_data.name);
um.getUsername(user_data.name,function(response){ //check to see if username exists
console.info("tt3" +user_data);
var userinfo = response;
exports.logplayer = userinfo;
if (exports.logplayer == null){ //if user name doesnt exist then create a new user
var newuser = new Player(user_data.name,0,0,0,0,0,0,user_data.password, "", "");
console.info(JSON.stringify(newuser) + "user couldn't be found in csv, so new user has been created");
um.updateUser(newuser,function(){ //this will update to csv
exports.logplayer = newuser;
res.status(200);
res.setHeader('Content-Type', 'text/html')
res.render('game', {user:exports.logplayer});
}); //updateUser
}
else{ //if username does exist, return index for them to input the correct password
var user_data = {
name:"",
password:"",
message:"The entered username exists but the entered password doesn't match it."
};
res.status(200);
res.setHeader('Content-Type', 'text/html')
res.render('index', {data:user_data});
console.info("wrong password");
}
});// getusername
}
else{ //if the player already exists
res.status(200);
message = "Let's play!";
res.setHeader('Content-Type', 'text/html')
res.render('game', {user:exports.logplayer, message:message});
console.info("rendering the game for an existing user:" + exports.logplayer.name);
}
});//getUser callback
} //password/username isn't blank
else{ // if password or username is blank
var user_data = {
name:"",
password:"",
message:"Please enter a username and password."
};
console.info(message);
res.status(200);
res.setHeader('Content-Type', 'text/html')
res.render('index', {data:user_data});
}
});//router.get('/users/game'
Когда вы регистрируете user_data.name вверху. Что на самом деле регистрируется? Обновите вопрос, чтобы другие тоже могли видеть, пожалуйста
спасибо за указание на это, я думаю, это могло бы исправить это!!!
Чтобы узнать больше о подъеме переменных, проверьте stackoverflow.com/questions/30575151/….
Возможный дубликат Подъем переменных в javascript





Не используйте
varдля уже существующей переменной, если вы не хотите, чтобы она больше не существовала для всей области действия, в которой находитсяvar. Даже если она находится в блоке else, она все равно будет поднята и, таким образом, сделаетuser_dataнеопределенной.