在使用猫鼬的findOne函数并按特定字段进行搜索时,遇到一个奇怪的错误。我正在使用mongoose 5.6.0和mongoDB 3.6.9。
我不知道是什么问题,请帮忙!
这是电话:
User.findOne({googleId:googleId})
.select('-password')
.exec()
.then(user => {
if(user)
{
const googleUser = user;
return done(null, googleUser);
}
else
{
const newUser = new User({
_id: new mongoose.Types.ObjectId(),
method: "Google",
email: profile.emails[0].value,
googleId: googleId,
role: "User"
});
newUser.save()
.then(saveduser => {
const googleUser = saveduser;
return done(null, googleUser);
})
.catch(error => {
log.error("Error saving Google ID: " + googleId + " => " + error.message);
return done(error, false)
})
}
})
.catch(error => {
log.error("Error looking up Google ID: " + googleId + " => " + error.message);
return done(error, false)
})
这是用户架构:
/*
==============================================
User Model
==============================================
*/
const mongoose = require('mongoose');
const userSchema = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
email: {
type: String,
unique: true,
},
password: {
type: String,
required: function() {
return this.method === "Local";
}
},
role: {
type: String,
enum: ["Developer", "Admin", "Moderator", "User"],
required: true
},
enabled: {
type: Boolean,
required: true,
default: true
},
method: {
type: String,
enum: ["Local", "Google", "Facebook"],
default: "Local"
},
googleId: {
type: String,
default: ''
},
facebookId: {
type: String,
default: ''
}
},
{
timestamps: true
});
module.exports = mongoose.model('User', userSchema);
这是错误:
[2019-06-14T22:47:16.055]无法读取未定义的属性“值”
答案 0 :(得分:0)
您有一个profile
,它没有emails
数组,或者该数组为空,因为发生错误的地方是profile.emails[0].value
。
只需检查以确保您具有电子邮件数组并且有第一个元素。
您可以执行以下操作:
email: profile && profile.emails && profile.emails.length && profile.emails[0].value
或者甚至更好的方法是将该电子邮件传递给本节并事先对其进行清理。