首页 文章

ArangoDB模型事件未与存储库一起使用

提问于
浏览
1

我正在导出一个模型,如下所示:

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模型事件以响应存储库事件的唯一方法是在将实例传递给repo之前通过instance.on(...)向模型实例注册该函数 .

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

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

1 回答

  • 1

    ArangoDB 2.7将ES5样式的构造函数替换为ES6类 . 当使用 extend 方法时,此更改引入了许多细微的错误,这就是为什么它在后续的错误修复版本中被还原的原因 .

    ArangoDB的当前版本是2.7.4 . 您可以尝试升级,看看是否能解决您的问题?

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

    在此期间,您可以手动绑定每个存储库实例的事件,如下所示:

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

相关问题