2017-09-21 7 views
0

기본적으로 날짜가있는 PersitedModel의 createdOn 및 lastUpdatedOn 필드가있는 모델이 있습니다. after save 작업 후크에서이를 업데이트하고 있습니다. 이것이 MyModel.js의 모습입니다.저장 작업 후 LoopbackJs 호출

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의 업데이트를 위해 코드를 제거하는 경우는 내가 조작 후크 this.Am 내가 일을 방지하기 위해이 방법을 method.Is를 호출 계속되고 직면하고 있음을 기본적으로 fine.So에게 문제를 작동 잘못된.? 이 메서드를 한 번만 호출하고 싶습니다.

답변

0

사용 사례는 모델 후크 대신 믹스 인을 사용해야합니다. Loopback에는 자신을 어떻게 만드는지에 관한 약간의 documentation이 있습니다.

당신은 이전에 시도 생성을 저장하고 업데이트를 저장 한 후 수, 창조의 날짜가 원 https://www.npmjs.com/package/loopback-ds-timestamp-mixin

+0

수 지금은 전에 MyModel.observe 후크 저장하여 구현 한 ('전에 '기능 (CTX, 다음) { 을 저장 if (ctx.instance && ctx.isNewInstance) { ctx.instance.createdOn = new Date(); } if (ctx.data &&! ctx.isNewInstance) { ctx.data.lastUpdatedOn = new Date(); } next(); }}); –

0

미안 해요, 코멘트를 넣을 수 없습니다 ... : 당신이 NPM에 사용할 수있는 하나의도 있습니다 'T는 큰 차이이 들어 go.However에 가장 좋은 방법 같은데

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(); 
    }); 

} 
+0

예 마지막으로 저장 후크를 사용하기 전에 구현을 완료했습니다. Channel.observe ('before save', function (ctx, next) { if (ctx.instance && ctx.isNewInstance) { ctx.instance.createdOn = new Date(); } 경우 (ctx.data && ctx.isNewInstance!) { ctx.data.lastUpdatedOn = 새로운 날짜(); } 다음(); }); 그러나 믹스 인 솔루션은 @nVitius로 진행하는 것이 가장 좋은 방법 인 것 같습니다. –

+0

@DhruvDatt 당신이 해결책을 찾은 것을 알게되어 반가워요. 당신의 대답에 감사드립니다. –