处理 Meteor.method 中的"未定义"属性



我已经在流星应用程序中创建了一个函数,该功能设置为"丰富"流星集合中包含的数据。该功能是为了迭代集合,利用FullContact API在DB中维护的所有客户端条目(即LinkedIn Bio; No。员工等(中提取其他数据。

问题涉及并非所有数据点都可用于集合中的所有元素(例如,客户端可能没有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')
      }
    }
  }
});

在 @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 }}
  });

最新更新