【发布时间】:2016-10-05 22:39:37
【问题描述】:
我有一个包含唯一字段的集合。假设我在 pre save 方法中创建了这个唯一字段的值,如下所示:
schema.pre('save', function (next) {
var _self = this;
try {
if (config.devMode) {
log.debug('[' + si.name + ':write] - Executing presave on: ' + _self._id);
}
if(!_self.transaction_id){
_self.transaction_id = powm(30).toLowerCase();
}
next();
} catch (e) {
log.error('[' + si.name + ':write] - threw an error (SAVE): ', e.stack, _self);
next(e);
}
});
Powm 创建一个像 'dfjkfj3434jkl23k4j2k3j4asdf' 这样的随机字符串,它需要是唯一的。虽然字符串足够长,不会被复制,但我想确定如果是,我可以用一个新的重试保存,直到它有一个真正独特的值。
我知道 MongoDB 在像这样保存文档时会抛出一个冒泡的错误:
documentname.save(function(err, doc){
// If mongodb unique error then reset with a new id and resave
});
但这迫使我在代码中寻找发生这种情况的所有地方。所以我想知道我是否可以在 post mongoose 中间件中捕捉到这个错误。问题是似乎没有错误对象被传递给 post save 方法。那么,对此有什么想法吗?谢谢!
【问题讨论】:
标签: node.js error-handling mongoose unique middleware