Работа с неопределенными свойствами в Meteor.method

Я создал функцию в своем приложении Meteor, которая настроена на "обогащение" данных, содержащихся в коллекции метеоров. Функция предназначена для перебора коллекции, использования полноконтактного API для извлечения дополнительных данных обо всех записях клиента, хранящихся в БД (т. Е. LinkedIn Bio; количество сотрудников и т. Д.).

Проблема заключается в том, что не все точки доступа доступны для всех элементов в коллекции (например, клиент может не иметь профиля LinkedIn). Функция работает для начальной пары элементов, но в конечном итоге не TypeError: Cannot read property '2' of undefined, поскольку data variable не содержит биографию профиля LinkedIn для компании (для данного конкретного примера).

Что вы предлагаете в качестве тренировки? Есть идеи? Ваша помощь будет высоко ценится - я был в этом в течение нескольких часов.

Meteor.methods({
  enrichment() {
    var fullcontact = new FullContact(Meteor.settings.fullContact);
    for (var i = 1; i < customerDb.find({ company: "Qualify" }).count(); i++) {
      var url = customerDb.findOne( { company: "Qualify", 'item.clientId': i.toString() } )['item']['contact_website'];
      var data = fullcontact.company.domain(url);
      if ( data['status'] == 200 ) {
        customerDb.update ({ 
          company: "Qualify", 'item.clientId': i.toString()
        }, {
          $push: {
            bio: data['socialProfiles'][2]['bio'],
            keywords: data['organization']['keywords'],
            employees: data['organization']['approxEmployees'],
            domesticTrafficRank: data['traffic']['topCountryRanking'][0],
            globalTrafficRank: data['traffic']['ranking'][0]
          }
        });
      } else {
        console.log('Data could not be found on the company')
      }
    }
  }
});

1 ответ

Основываясь на предложении @chazsolo, вы можете иметь дело с потенциально отсутствующими данными и ключами с помощью Javascript AND и OR. Это обычный защитный кодировщик.

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

if ( data['status'] == 200 ) {
  const bio = data['socialProfiles'] && data['socialProfiles'][2] && data['socialProfiles'][2]['bio'] || '';
  const keywords = data['organization'] && data['organization']['keywords'] || '';
  const employees = data['organization'] && data['organization']['approxEmployees'] || '',
  const domesticTrafficRank = data['traffic'] && data['traffic']['topCountryRanking'] && data['traffic']['topCountryRanking'][0] || '',
  const globalTrafficRank = data['traffic'] && data['traffic']['ranking'] && data['traffic']['ranking][0] || '';

  customerDb.update (
    { company: "Qualify", 'item.clientId': i.toString() },
    { $push: { bio, keywords, employees, domesticTrafficRank, globalTrafficRank }}
  });
Другие вопросы по тегам