因此,我在我的用戶架構上實現findOrCreate
,基本上只有一組配置文件(每個用戶可以有多個登錄策略)。你可以把它看作一個給定的用戶,通過提供一個匹配的提供者和id的配置文件給我們所稱的findOrCreate
提供的配置文件。 findOrCreate
的目標是識別與提供的配置文件相匹配的用戶或使用提供的配置文件創建新用戶。這個函數有四個返回的情況。而查詢用戶 node.js + mongoose UserSchema findOrCreate
- 誤區一
- 無法找到用戶,併成功創建了一個
現在,我相信下面的代碼可以做到這一點。我對這個問題的擔憂和原因是提供給findOne
的回調並不一致地返回。如果在查詢用戶時發生錯誤,我們將返回回調(...),如果我們找到用戶,則返回回調(...),但是,如果我們需要創建用戶,我們永遠不會顯式返回。有沒有辦法可以返回保存的結果?那就是我應該做的事情,還是這樣糾正我的方式?
代碼:
UserSchema.static('findOrCreate', function (profile, callback) {
this.findOne({ profiles: { $elemMatch: { provider: profile.provider, id: profile.id }}}, function(err, user) {
if (err)
return callback(err);
if (user)
return callback(null, user);
user = new User({
profiles: [profile]
});
user.save(function (err, user) {
if (err)
return callback(err);
return callback(null, user);
});
});
});
此代碼看起來不錯。雖然彼得想清理它的想法是一個很好的想法,但你在這裏所擁有的應該仍然有效。 – JohnnyHK 2013-03-08 13:34:32