Невозможно прочитать свойство 'значение' из неопределенного - mongoose 5.6.0 - PullRequest
0 голосов
/ 15 июня 2019

При использовании функции findOne mongoose и поиске по определенному полю я сталкиваюсь со странной ошибкой.Я использую 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] Невозможно прочитать свойство 'значение' из неопределенного

1 Ответ

0 голосов
/ 15 июня 2019

У вас есть profile, который либо не имеет массива emails, либо массив пуст, поскольку profile.emails[0].value - это место, где вы получаете ошибку.

Просто убедитесь, что у вас естьмассив emails и есть первый элемент.

Вы можете сделать что-то вроде этого:

email: profile && profile.emails && profile.emails.length && profile.emails[0].value

или даже лучше просто передать это письмо в этот раздел и предварительно санировать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...