我在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");
})
}
})
任何人都知道如何解决此问题
谢谢!
答案 0 :(得分:2)
错误消息Cannot read property 'password' of null
表示user
为null
。但是代码正在检查空字符串。相反或另外检查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")
该错误消息表明user
为null
(因为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")