存储库未触发 ArangoDB 模型事件

ArangoDB Model Events Not Fired with Repository

我正在导出如下模型:

var Foxx = require("org/arangodb/foxx");
var myNewModel = Foxx.extend(
{ schema:{...} },
{
    beforeSave: function() { 
        throw new Error('reached before save');
    }
});

并在控制器中使用它,如下所示:

var FoxxRepo = require("org/arangodb/foxx").Repository;
...
app.POST(function(req, resp) {
  var instance = new myNewModel({...schemadata...});
  var repo = new FoxxRepo(collection, { model: myNewModel });
  repo.save(instance);
}
...

让 beforeSave 模型事件响应存储库事件的唯一方法是在将实例传递到存储库之前通过 instance.on(...) 向模型实例注册函数。

此讨论中有一些线索,但它们似乎是在添加事件注册刚刚开始时的日期。文档 here 有一个显示事件注册的示例,如我在此处所示。我的服务器版本是2.7.1.

有没有办法将事件处理程序添加到定义文件中的 foxx 模型,并将处理程序包含在实例中,以便它们侦听存储库事件,或者我必须通过 model.on 手动添加所有处理程序() 每次创建一个新的数据模型实例?

A​​rangoDB 2.7 将 ES5 风格 constructors-with-prototypes 替换为 ES6 类。此更改在使用 extend 方法时引入了许多细微错误,这就是它在后续错误修复版本中恢复的原因。

A​​rangoDB的当前版本是2.7.4。您能否尝试升级,看看能否解决您的问题?

编辑:我可以在最新的 ArangoDB 2.7 和 2.8 中重现错误。似乎没有足够的测试覆盖率并且错误漏掉了。谢谢你告诉我们。该问题将在下一个错误修复版本中修复。

同时,您可以像这样为每个存储库实例手动绑定事件:

repo.on('beforeSave', Model.beforeSave.bind(Model));