TypeError: Не удаётся прочитать свойства неопределённого значения (чтение ‘propertyType’)

Вопрос или проблема

У меня вопрос по mongoose..

// Сравнение шаблона местоположения с полями базы данных
    let query = {
        $or: [
            { name: locationPattern },
            { 'details.description': locationPattern },
            { 'location.address': locationPattern },
        ],
    }

    // Проверять свойство только если оно не 'Все'
    if (propertyType && propertyType !== 'Все') {
        const typePattern = new RegExp(propertyType, 'i')
        query.details.propertyType = typePattern
    }

Но у меня проблема на этой строке, когда я пытаюсь добавить еще один критерий в мой запрос.

query.details.propertyType = typePattern

TypeError: Невозможно прочитать свойства undefined (чтение ‘propertyType’)

В чем проблема и каков правильный синтаксис?

Правильный синтаксис для добавления критерия в мой запрос

Ответ или решение

Ваша ошибка связана с тем, что объект query.details не инициализирован, поэтому вы получаете ошибку TypeError: Cannot read properties of undefined (reading 'propertyType'). Когда вы пытаетесь добавить propertyType к query.details, JavaScript не может найти details, потому что он не существует.

Для решения этой проблемы вам необходимо сначала инициализировать query.details, если он еще не определен. Вы можете сделать это, проверив существование query.details, а затем инициализировав его как объект, если такового нет. Вот как вы можете изменить ваш код:

// Match location pattern against database fields
let query = {
    $or: [
        { name: locationPattern },
        { 'details.description': locationPattern },
        { 'location.address': locationPattern },
    ],
}

// Только добавлять критерий, если propertyType не 'All'
if (propertyType && propertyType !== 'All') {
    const typePattern = new RegExp(propertyType, 'i');

    // Инициализируем query.details, если он не существует
    if (!query.details) {
        query.details = {};
    }

    // Добавляем условие propertyType
    query.details.propertyType = typePattern;
}

Объяснение:

  1. Инициализация query.details:
    Мы добавили проверку if (!query.details), которая позволяет инициализировать query.details как пустой объект {}, если он еще не был создан.

  2. Добавление условия propertyType:
    Теперь вы можете безопасно добавлять propertyType к query.details, так как details уже инициализирован как объект.

Таким образом, после этой правки код будет правильно работать, и ошибка не возникнет. Убедитесь, что вы также тестируете свои изменения, чтобы удостовериться, что ваш запрос теперь работает так, как вы ожидаете.

Оцените материал
Добавить комментарий

Капча загружается...