代码之家  ›  专栏  ›  技术社区  ›  dhrDatt

保存操作挂钩后只调用一次LoopbackJs

  •  1
  • dhrDatt  · 技术社区  · 7 年前

    after save 操作挂钩。这就是我的模型。js看起来像。

    module.exports = function(MyModel) {
      MyModel.observe('after save', function(ctx, next) {
        if (ctx.instance && ctx.isNewInstance) {
          ctx.instance.updateAttribute('createdOn', new Date());
        }
        if (ctx.instance && !ctx.isNewInstance) {
          ctx.instance.updateAttribute('lastUpdatedOn', new Date());
        }
        next();
     });
    }
    

    现在操作钩子一直在调用这个方法。并导致我的应用程序崩溃。

    <--- Last few GCs --->
    
    441366 ms: Mark-sweep 1279.7 (1410.5) -> 1279.7 (1410.5) MB, 1093.9 / 0.0 ms [allocation failure] [GC in old space requested].
    442456 ms: Mark-sweep 1279.7 (1410.5) -> 1279.7 (1410.5) MB, 1090.7 / 0.0 ms [allocation failure] [GC in old space requested].
    443606 ms: Mark-sweep 1279.7 (1410.5) -> 1286.6 (1403.5) MB, 1148.8 / 0.0 ms [last resort gc].
    444735 ms: Mark-sweep 1286.6 (1403.5) -> 1293.7 (1403.5) MB, 1129.2 / 0.0 ms [last resort gc].
    
    
    <--- JS stacktrace --->
    
    ==== JS stack trace =========================================
    
    Security context: 00000173CF3CFB49 <JS Object>
    

    如果我删除lastUpdatedOn的更新代码,那么它可以正常工作。因此,我面临的基本问题是操作钩子一直在调用该方法。有没有办法防止这种情况。我做错什么了吗。?我只想调用这个方法一次

    3 回复  |  直到 7 年前
        1
  •  0
  •   nVitius    7 年前

    对于您的用例,您应该尝试使用mixin而不是模型挂钩。环回有一些 documentation 关于你如何做你自己。您还可以在npm上使用一个: https://www.npmjs.com/package/loopback-ds-timestamp-mixin

        2
  •  0
  •   Anouar Kacem    7 年前

    对不起,我不能发表评论。。。

    module.exports = function(MyModel) {  
    
        MyModel.observe('before save', function(ctx, next) {
            if (ctx.instance && ctx.isNewInstance) {
              ctx.instance.updateAttribute('createdOn', new Date());
            }        
            next();
         });
    
        MyModel.observe('after save', function(ctx, next) {
           if (ctx.instance && !ctx.isNewInstance) {
              ctx.instance.updateAttribute('lastUpdatedOn', new Date());
            }      
            next();
         });
    
    }
    
        3
  •  0
  •   chesscov77    5 年前

    你应该看看这个: https://loopback.io/doc/en/lb3/Operation-hooks.html#operation-options

    基本上,您可以将选项作为最后一个参数传递给任何模型操作,然后钩子可以读取这些操作。