【发布时间】:2013-01-24 00:55:21
【问题描述】:
如果数据库中存在 facebook id,我会尝试创建数据,否则会创建新数据,但是第一个条件可以正常工作,但是当它创建数据时没有任何反应,即使我硬编码提供程序值,也只能得到 connot read property 'provider' of null。
db.collection('accounts', function(err, collection){
collection.findOne({'email': fbEmail}, function(err, item){
var providerId = item.provider.facebook.id;
console.log("facebook id should be: "+providerId);
if(providerId == ""){
collection.update({email:fbEmail, 'provider.facebook.id':""}, {$set: {"provider.facebook.id": fbId}}, {safe:true}, function(err){
if(err){
console.log(err);
}else{
console.log("id updated!");
};
});
}else{ //creates a new user
console.log("creating a new account...");
collection.update({'email': fbEmail}, {
'email': fbEmail,
'provider':
{
'facebook': {'id': fbId},
'twitter': {'id': ""}
}
}, {upsert:true}, function(err, doc){
if(err){
console.log("Error finding email "+err);
}
});
}
});
});
【问题讨论】:
-
在您的
findOne回调中,您需要在检查item.provider之前检查item是否为null。如果这是一封新电子邮件,item将是null。
标签: javascript node.js mongodb express node-mongodb-native