我正在尋找關於如何鏈接使用mongodb/mongoose「查找或創建」功能的承諾的建議。貓鼬 - 鏈接承諾
我已經試過目前:
userSchema.statics.findByFacebookIdOrCreate = function (facebookId, name, email) {
var self = this;
return this.findOne({facebookId: facebookId }).exec()
.then(function (user) {
if (!user) {
return self.model.create({ facebookId: facebookId, name: name, email: email }).exec().then(function (user) {
return user;
});
}
return user;
});
};
而且我把它從我的(節點/快遞)API端點:
User.model.findByFacebookIdOrCreate(fbRes.id, fbRes.name, fbRes.email).then(function (user) {
return res.sendStatus(200).send(createTokenForUser(user));
}, function (err) {
return res.sendStatus(500).send({ error: err });
});
的問題是,雖然:
- 即使用戶從findOne查詢中爲null,創建永遠不會被調用
- 我是n OT確保我使用的是正確的諾言風格/最有效的編碼風格
- 我是否正確如處理錯誤只在頂層或者我需要在各個層面做
誰能明白我做錯了,我怎麼能做得更好?
謝謝。
UPDATE
問題的原因是,
self.model.create(...)
應該是(無參考模型)
self.create(...)
不過,我現在需要知道我」 m做錯誤處理錯誤 - 我可以看到發生錯誤,但我看不到原因。
我仍然有存在的一些錯誤,我知道,因爲我得到的500
return res.sendStatus(500).send({ error: err });
狀態,但實際的錯誤信息/細節是空的。
1.嘗試'return self.model.create(...' 2.鏈接承諾時,總是返回一個新的承諾或最終的值 3.最後有一個單一的錯誤函數就好了 – Ivancho 2014-11-23 22:38:41
謝謝,我原本有這樣的回報,但它沒有幫助,只是拿出來看效果。 – prule 2014-11-23 22:40:55
我已經編輯了這個問題,讓回來的回來。其他想法? – prule 2014-11-23 22:42:47