我正在尝试是否删除了我的数据,然后显示return "removed successfully";
,但它也无法正常工作,也无法删除数据。如果我没有使用过函数,那么数据将被删除,但不会通过回调获得任何返回结果
正在运行
Meteor.methods({
removeFAV: function(userID, product_id) {
Favorites.remove(
{ user_id: userID, product_id: product_id },
{ multi: true }
);
}
});
它不起作用
Meteor.methods({
removeFAV: function(userID, product_id) {
Favorites.remove(
({ user_id: userID, product_id: product_id }, { multi: true }),
function(err) {
if (err) {
return err;
} else {
return "removed successfully";
}
}
);
}
});
答案 0 :(得分:1)
流星Mongo.Collection
不是本地的Mongo集合,而是将本地Mongo调用集成到流星环境中的包装器。
请参阅:https://docs.meteor.com/api/collections.html#Mongo-Collection
除非您提供回调,否则insert
update
和remove
方法具有特定的阻止行为:
在服务器上,如果不提供回调,请删除块,直到数据库确认已写入,然后返回已删除文档的数量,如果出现问题,则引发异常。
如果提供回调,请立即删除返回值。删除完成后,如果失败,则使用单个错误参数调用回调,如果删除成功,则使用第二个参数指示已删除文档的数量。
https://docs.meteor.com/api/collections.html#Mongo-Collection-remove
由于阻塞类型调用会自动引发错误,因此从理论上讲,无需显式处理该异常:
Meteor.methods({
removeFAV: function(userID, product_id) {
const removedDocs = Favorites.remove(
{ user_id: userID, product_id: product_id },
{ multi: true });
// remove returns the number of docs being removed
return `removed [${removedDocs}] document(s) successfully`
}
});
这样的方法将在Meteor.call
的回调中返回抛出的错误作为第一个参数或结果作为第二个参数。
但是,处理异常并让方法静默失败也很有意义:
Meteor.methods({
removeFAV: function(userID, product_id) {
let removedDocs = 0
try {
// remove returns the number of docs being removed
removedDocs = Favorites.remove(
{ user_id: userID, product_id: product_id },
{ multi: true });
} catch (e) {
// log error
myErrorLog.log(e)
} finally {
return `removed [${removedDocs}] document(s) successfully`
}
}
});
这绝不会将错误返回给客户端,而是将错误记录在服务器上。