2015-10-06 3 views
0

Когда я набираю имя пользователя, которое есть в таблице «fun», я не сталкиваюсь с какой-либо ошибкой, но когда я ввожу неправильное имя, которое является именем, которого нет в таблице am this is the error и код прилагается ниже.TypeError: Невозможно прочитать свойство 'name' of undefined

app.post('/Fu',function(req,res,next){ 

     var username = req.body.uname; 
     var password = req.body.pwd; 


     con.query('SELECT name FROM fun WHERE name = "' + username +'" ',function(err, result,fields) { 


      var w = result[0].name; 

      if(username == w){ 
     console.log("login successful"); 

     } 
     else{ 
       console.log("login not successful");  
        } 
    } 

}); 

      res.send("success1"); 
      }); 

может кто-то помочь с ошибкой.

ответ

0

Ваша проблема здесь:

var w = result[0].name;

Поскольку результат установлен на [0] не существует (запрос вернулся ни с чем). вы пытаетесь получить значение name от чего-то undefined.

ли что-то вроде этого:

var w 
if (result[0]) { 
    w = result[0].name 
} else { 
    //your logic to handle this scenario 
} 

Это предполагает, что все дб ​​выполнение запроса библиотеки вы используете, будет возвращать массив, даже если он пуст. Если она возвращает undefined вместо пустого массива, ваше if заявление нужно будет выглядеть как: if (result && result[0])

+0

спасибо это работает :) –

1

Эта ошибка, вероятно, связано с тем, что, когда имя пользователя не присутствует в таблице, result будет установлен и пустой массив []. Это означает, что у него нет элементов вообще, поэтому result[0] - undefined.

Обязательно проверьте это, прежде чем пытаться получить result[0].name.

Кроме того, я хотел бы предложить вам несколько вещей:

1) Добавить проверку ошибок, прежде чем что-либо еще;

2) Вам не нужно проверять, совпадает ли имя с результатом. В запросе, который вы написали, будут возвращены только те записи, которые уже соответствуют этому требованию;

3) Отправьте ответы внутри функции обратного вызова, в противном случае пользователь получит ответ «success1» до того, как запрос еще завершит выполнение.

Здесь следует полученный код:

app.post('/Fu',function(req, res, next){ 
    var username = req.body.uname; 
    var password = req.body.pwd; 

    con.query('SELECT name FROM fun WHERE name = "' + username +'"', function(err, result,fields) { 
     if (err) { 
      response.sendStatus(500); 
      return; 
     } 

     if (result.lenght > 0) { 
      res.send('Login was successful'); 
     } else { 
      res.send('Login was not successful'); 
     } 
    }); 
}); 
+0

Большое спасибо, что она работает на самом деле я знал, как я получаю сообщение об ошибке, но не в состоянии разобраться спасибо еще раз :) –

Смежные вопросы