0

我在保存文档时定义了一个预保存方法,如下所示:

Org.pre("save",function(next, done) {
  var Currency = require('./currency');

  var cur = this.get('currency');
  console.log("checking currency: " + cur);

  Currency
    .findOne({name: cur})
    .select('-_id name')
    .exec(function (err, currency) {
      if (err) done(err);
      if (!currency) done(new Error("The currency you selected ('" + currency + "') is not supported.  Please select one from /currencies"));
      next();
    });
});

此方法检查货币集合以查看是否支持货币字段输入。在测试我的 API 时,我得到了返回的相应错误(消息中出现 500 错误:您选择的货币...),但该文档仍保存在 MongoDB 中。我希望在发送错误时不应保存文档。我在这里错过了什么吗?

4

2 回答 2

1

您仍在调用next();错误情况,因此请尝试将该部分重写为:

Currency
  .findOne({name: cur})
  .select('-_id name')
  .exec(function (err, currency) {
    if (err) return done(err);
    if (!currency) return done(new Error("The currency you selected ('" + currency + "') is not supported.  Please select one from /currencies"));
    next();
  });
于 2013-01-07T16:04:41.857 回答
0

似乎通过不将 next() 放在括号中,流程继续。为了使它起作用,我按如下方式更改了 exec 函数:

  if (err) {
    done(err);
  } else if (!currency) {
    done(new Error("The currency you selected ('" + currency + "') is not supported.  Please select one from /currencies"));
  } else {
    next();
  }

问题解决了。

于 2013-01-07T16:04:22.763 回答