Node.JS变量外部函数

时间:2015-09-27 04:10:23

标签: javascript node.js mongodb if-statement

我在node.js中使用mongodb和mongoose 在函数内部,它验证用户名和密码。 user.password在第一个if语句中工作,但之后在if else下面,用户实际进入游戏时返回。

              if (password1 == user.password) {
                                   ^
TypeError: Cannot read property 'password' of null

我的代码是。

User.findOne({ 'Username: ': username1}, function(err, user) {
    if (err){
        console.log("There was an error proccesing the request".red + " : ".red + err);
    } else if (user == '') {
        console.log("This user was not found")

    } else {
      prompt('Password: ', function(password1){
          if (password1 == user.password) {

              console.log("User Login Sucsess")
          } else {

              console.log("Password incorrect")
              proccess.exit();
          }


          console.log("made it");


      })

    }
})

任何人都知道如何解决此问题

谢谢!

2 个答案:

答案 0 :(得分:2)

错误消息Cannot read property 'password' of null表示usernull。但是代码正在检查空字符串。相反或另外检查null。例如,而不是......:

} else if (user == '') {

...做更像这样的事情:

} else if (! user) {
如果! user为空字符串或user或任何falsy value,则

null为真。

答案 1 :(得分:1)

投掷错误的行不一定有任何问题:

if (password1 == user.password) {

在问题变得确定的地方更是如此。问题的根源是几行:

} else if (user == '') {
    console.log("This user was not found")

该错误消息表明usernull(因为null不能拥有.password}等属性,这意味着在这种情况下找不到与查询匹配的文档。但是,条件是没有抓住这一点,允许函数继续执行,并且当没有user.password时尝试阅读user

这是因为null == ''false。在JavaScript中,null值仅为==自身或undefined

var user = null;
console.log(user == '');        // false

console.log(null == '');        // false
console.log(null == null);      // true
console.log(null == undefined); // true

调整条件以特别检查null应解决此问题:

} else if (user == null) {
    console.log("This user was not found")