我正在寻找关于如何链接使用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