【发布时间】:2018-07-15 12:51:08
【问题描述】:
我正在使用基本类来封装 Mongoose。即使我的查询正确返回了User,我也无法直接访问它的属性。以下代码打印用户,但将 user.email 打印为未定义。
问题:
当我使用console.log('User from DB: '+ dbUser); 时,我看到完全保存的用户。但是,当我尝试访问 dbUser.email 时,我得到了 undefined
const UserSchema = mongoose.Schema({
email: {type: String, index: {unique: true, sparse: true}},
password: String,
createdOn: {type: Date, default:Date.now },
});
const User = mongoose.model("User", UserSchema);
class Database{
static async getUser(userId) {
const user = await User.find(userId);
return user;
}
}
async function run() {
await mongoose.connect('mongodb://localhost/stack');
await Device.remove();
await User.remove();
const user = new User({'email':'email@address.com','password':'plainsecret'});
const newUser = await user.save();
console.log('New User: ',newUser);
console.log('Email: ' + newUser.email);
const dbUser = await Database.getUser(newUser._id);
console.log('User from DB: '+ dbUser);
console.log('User email from DB: ' + dbUser.email); //undefined???
return newUser
}
run().then( (user) => {
console.log('Done' + user);
process.exit(0);
}).catch((err) => {
console.log('Exception' + err);
process.exit(0);
})
【问题讨论】:
-
您是否检查过用户是否实际保存在 db 上?如果没有,您的
User架构定义可能存在一些问题。 -
当我打印
console.log('User from DB: '+ dbUser);时,我看到完全保存的用户。但是我尝试访问 dbUser.email 我得到 undefined -
不,我的意思是,你真的用另一个工具检查了数据库吗? Mongoose 默认返回你提供的保存对象。
-
const dbUser = await Database.getUser(newUser._id);从DB 获取用户,我可以打印并查看。是的,我还检查了 Robo3T,是的。