TypeError:无法读取属性' name'未定义的

时间:2015-10-06 16:12:55

标签: mysql node.js express

当我输入Table" fun"中的用户名时我没有遇到任何错误,但是当我输入错误的名称时,表格中没有的名称面临错误this is the error并且代码附在下面。

    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");
           });

有人可以帮助解决错误。

2 个答案:

答案 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');
        }
     });
});

答案 1 :(得分: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
}

这假设您使用的任何db查询库都将返回一个数组,即使是空的。如果它返回undefined而不是空数组,则您的if语句需要看起来更像:if (result && result[0])