LoopbackJs Call After Save Operation Hook 只有一次
LoopbackJs Call After Save Operation Hook only once
我的 PersitedModel 中有一个带有 createdOn 和 lastUpdatedOn 字段的模型,它们基本上是 dates.I 我正在 after save
操作挂钩上更新它。这就是 MyModel.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();
});
}
现在操作钩子一直调用这个 method.And 导致我的应用程序崩溃。
<--- 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 的代码,那么它就可以工作 fine.So 我面临的问题基本上是操作挂钩不断调用 method.Is 有一种方法可以防止 this.Am 我做错了什么。?我只想调用此方法一次
对于您的用例,您应该尝试使用混合而不是模型挂钩。 Loopback 有一些 documentation on how you can make your own. There's also one that you can use for this on npm: https://www.npmjs.com/package/loopback-ds-timestamp-mixin
抱歉,我无法发表评论...
保存前和保存后更新可以试试,创建日期不会有太大区别
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();
});
}
你应该看看这个:https://loopback.io/doc/en/lb3/Operation-hooks.html#operation-options
基本上,您可以将选项作为最后一个参数传递给任何模型操作,然后可以由 Hook 读取。
我的 PersitedModel 中有一个带有 createdOn 和 lastUpdatedOn 字段的模型,它们基本上是 dates.I 我正在 after save
操作挂钩上更新它。这就是 MyModel.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();
});
}
现在操作钩子一直调用这个 method.And 导致我的应用程序崩溃。
<--- 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 的代码,那么它就可以工作 fine.So 我面临的问题基本上是操作挂钩不断调用 method.Is 有一种方法可以防止 this.Am 我做错了什么。?我只想调用此方法一次
对于您的用例,您应该尝试使用混合而不是模型挂钩。 Loopback 有一些 documentation on how you can make your own. There's also one that you can use for this on npm: https://www.npmjs.com/package/loopback-ds-timestamp-mixin
抱歉,我无法发表评论...
保存前和保存后更新可以试试,创建日期不会有太大区别
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();
});
}
你应该看看这个:https://loopback.io/doc/en/lb3/Operation-hooks.html#operation-options
基本上,您可以将选项作为最后一个参数传递给任何模型操作,然后可以由 Hook 读取。