环回:为模型实例

时间:2018-05-16 16:47:27

标签: node.js loopbackjs loopback

例如,我有一个环回模型名Event,它有2个属性,如:

...
"properties": {
  "name": {
    "type": "string",
    "required": true
  },
  "end": {
    "type": "date",
    "required": false
  }
}...

如何使用以下逻辑添加动态属性名称status

if (now() > this.end) {
  this.status = 'end';
} else {
  this.status = 'running';
}

此外,我还希望在Loopback REST API的JSON响应中使用status。谢谢你们。

2 个答案:

答案 0 :(得分:1)

如果在远程挂钩或操作挂钩中添加必需属性ctx,则该属性将添加到模型中并保存到数据库中。

使用远程钩子,

Event.beforeRemote('*', (ctx, modelInstance, next) => {
    ctx.req.body.propertyName = propertyValue;
    ...
    next();
});

这里,*可以是任何端点的任何操作。有关详细信息,请参阅this

使用Operation hook,

Event.observe('before save', (ctx, next) => {
   //for insert, full update
   if(ctx.instance) {
       ctx.instance.propertyName = propertyValue;
       ...
       return next();
   } 
   // for partial update
   else if(ctx.data) { 
       ctx.data.propertyName = propertyValue;
       ...
       return next();
   }
}); 

答案 1 :(得分:0)

我认为最简单的方法是使用remote hooks,只需将属性添加到结果集中即可。解释一下文档:

Event.afterRemote('**', function (ctx, user, next) {
  const now = new Date();
  if(ctx.result) {
    if(Array.isArray(ctx.result)) {
      ctx.result.forEach(function (result) {
        result.status = now > result.end ? 'end' : 'running';
      });
    } else {
      result.status = now > result.end ? 'end' : 'running';
    }
  }

  next();
});