NodeJS - AOP为数据库异常执行常见操作

时间:2016-11-15 08:56:15

标签: javascript node.js

我正在创建一个与数据库交互的nodejs应用程序(使用sequelize)。现在,我的要求是在数据库连接出现问题时提出警报(snmp陷阱)。

我可以通过使用.then()。catch()来实现这一点:

db.myModel.find(...)
.then(function() { //do some processing })
.catch (function(e) {
  // TODO: write code to send an alert
  // ...
})

上面代码的问题在于,无论我在哪里进行DB操作,我都必须在整个代码中重复几次。

我正在为javascript寻找更简单的AOP(面向方面​​编程)方式。实际上我找到了几个库(herehere),但是如果流程进入catch块,我找不到任何执行建议的方法。

如果是Java,我们有一个能够捕获异常切入点的工具。我想知道我们是否有类似的功能。

1 个答案:

答案 0 :(得分:0)

aopromise中,最新的(遗憾的是未记录的)功能之一是向建议添加错误处理程序组件。 In the tests有一个例子,第三个处理程序捕获在pre,fn或post阶段发生的每个错误。

这是一个创建记录器方面记录错误和“重新抛出”错误的示例。您可以在自己的实现中决定是否要处理错误或将错误转发给调用者。

module.exports = function LoggerAspect(options) {
    return new AspectFrame(
        function (preOpts) {
            console.log(options || '', preOpts.originalFunction.name, 'was called with', preOpts.args);
        },
        function (postOpts) {
            console.log(options || '', postOpts.originalFunction.name, 'returned with', postOpts.result);
        },
        function (err) {
            console.error(options || '', postOpts.originalFunction.name, 'throw an exception with', err);
        }
    );
}