我正在构建Express / Node应用程序,并且正在尝试构建登录控制器。当请求传递到/ login时,我可以使用Mongoose的model.findOne在Mongo集合中找到用户详细信息,但是问题在于该函数返回的内容并不是mongo文档中的全部内容。
通过Robo 3T查询数据将返回所有信息
这是我的模特
{
firstname: String,
surname: String,
fullname: String,
firthDate: Date,
identityType: String,
identityNumber: String,
address: {
residential: Object,
business: Object
},
contact: {
email: String,
cellphone: String,
home: String,
business: String,
fax: String
},
compliance: {
type: String,
value: String
},
account: {
type: String,
username: String,
password: String,
masala: String
},
created: Date,
updated: Date
}
这是我的控制人:
user.findOne({"account.username": username}, (err, doc) => {
if (!err) {
// found user. Compare passwords and return JWT;
console.log(doc);
bcrypt.compare(password, doc.account.password, (err, isValid) => {
// I get an error here : Cannot read property password of undefined.
if (!err) {
if (isValid) {
// generate jwt and send back to user;
}
} else {
// invalid password provided;
}
});
} else {
}
});
我得到一个错误:无法读取属性“未定义的密码”。 这是“ doc”中的响应:
{
firstname: "hello",
surname: "world",
fullname: "hello world",
firthDate: "01 January 1970",
identityType: "idnumber",
identityNumber: "12345",
address: {
residential: {},
business: {}
},
contact: {
email: "",
cellphone: "",
home: "",
business: "",
fax: ""
},
compliance: {
type: "",
value: ""
}
}
好像findOne函数的响应中没有返回“ doc.account”数据。我不知道为什么,因为我首先使用的是“ doc.account”中的数据。
答案 0 :(得分:0)
您的帐户架构错误。 对于嵌套对象,应该是这样。
acount:{
username: {type:String},
password: {type:String},
}
现在将其视为具有属性用户名和密码的对象