我已经在我的Meteor应用程序中创建了一个函数,它被设置为“丰富”meteor集合中包含的数据。该函数旨在迭代集合,利用fullcontact 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')
}
}
}
});发布于 2017-07-04 11:33:35
基于@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 }}
});https://stackoverflow.com/questions/44833426
复制相似问题