Не может прочитать имя свойства неопределенного nodejs

Когда я запускаю свой сервер узла, я получаю ошибку типа: не могу прочитать имя свойства 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'

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

Kevin B 01.03.2019 17:50

Когда вы регистрируете user_data.name вверху. Что на самом деле регистрируется? Обновите вопрос, чтобы другие тоже могли видеть, пожалуйста

Matt Pengelly 01.03.2019 17:52

спасибо за указание на это, я думаю, это могло бы исправить это!!!

user10610135 01.03.2019 17:54

Чтобы узнать больше о подъеме переменных, проверьте stackoverflow.com/questions/30575151/….

Kevin B 01.03.2019 18:04

Возможный дубликат Подъем переменных в javascript

Kevin B 01.03.2019 18:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
267
0

Другие вопросы по теме