使用猫鼬保存多个文档时处理错误
Handling errors when saving multiple documents with mongoose
我正在创建一个可以接收多个文档的 API。
我的代码使用 promises 调用 Document#create,如下所示:
var body = [{url: "http://url1"}, {url: []}]; // example of a request payload
Image.create(body).then(function(images){
// do something...
}).onReject(function(err) {
// err is the object returned by the first problematic document
});
上面代码中的模型会拒绝第二个文档,因为 url
参数不是字符串。
问题是当其中一个文档未通过验证时,只有第一个失败会发送到 promise 中的失败函数。
此外,我无法访问任何已成功保存的记录。我在 github 上搜索了文档和测试,但找不到任何关于此事的信息。
创建多个文档时有没有更好的方法来处理这种情况?
显然目前无法获取将数组传递给 Document#create 方法时成功的记录。即使回调函数也不将它们作为参数传递。
我设法做我想做的事情的方法是通过 new
创建资源对象,然后保存对象:
var body = [{url: "http://url1"}, {url: []}]; // example of a request payload
var images = [];
body.forEach(function(img) {
var image = new Image(img);
image.save(function(err) {
images.push(err || image);
});
});
由于我不允许一次创建大量记录,因此此解决方案有效。在执行结束时,我有一个包含所有记录以及失败记录返回的错误消息的数组。
我正在创建一个可以接收多个文档的 API。 我的代码使用 promises 调用 Document#create,如下所示:
var body = [{url: "http://url1"}, {url: []}]; // example of a request payload
Image.create(body).then(function(images){
// do something...
}).onReject(function(err) {
// err is the object returned by the first problematic document
});
上面代码中的模型会拒绝第二个文档,因为 url
参数不是字符串。
问题是当其中一个文档未通过验证时,只有第一个失败会发送到 promise 中的失败函数。
此外,我无法访问任何已成功保存的记录。我在 github 上搜索了文档和测试,但找不到任何关于此事的信息。
创建多个文档时有没有更好的方法来处理这种情况?
显然目前无法获取将数组传递给 Document#create 方法时成功的记录。即使回调函数也不将它们作为参数传递。
我设法做我想做的事情的方法是通过 new
创建资源对象,然后保存对象:
var body = [{url: "http://url1"}, {url: []}]; // example of a request payload
var images = [];
body.forEach(function(img) {
var image = new Image(img);
image.save(function(err) {
images.push(err || image);
});
});
由于我不允许一次创建大量记录,因此此解决方案有效。在执行结束时,我有一个包含所有记录以及失败记录返回的错误消息的数组。