在 'after delete' 挂钩中获取数据库操作状态

Get Status of database operation in 'after delete' hook

今天我 运行 遇到一个问题,我无法确定 'after delete' 挂钩中的删除操作是否成功完成。这是有问题的,因为它需要额外的数据库操作来确定删除是成功还是失败。

UserFollowers.observe('after delete', function observer(ctx, next) {
    var instance = ctx.instance; // ctx.instance is null for some reason.
    logger.info('Starting after delete'); 
    logger.info('Ctx:',JSON.stringify(ctx)); 
      // Ctx: {"where":{"followSrcId":2,"followDestId":1},"hookState":{},"options":{}}
    logger.info('Ctx Non-Enumerable Properties:', Object.getOwnPropertyNames(ctx));
      // Ctx Non-Enumerable Properties: ["Model","where","hookState","options"]
    // Note that Model is the only non-enumerable property not spit out by JSON.stringify()
});

没有指示操作是成功还是失败,并且无论操作是否成功,都会调用 'after delete' 挂钩。 (在数据库中手动验证)

此外,确定操作是否成功的唯一方法是尝试 select 之前存在的记录。

有什么办法可以得到这个吗?

您可以设置一个 ChangeStream,它会在服务器上的模型发生更改时发送一个事件。唯一需要注意的是 DELETE,当操作成功时,即使没有匹配请求的记录,您也会收到一个事件。因此,例如,如果我尝试使用 name=foo 删除同一条记录两次,我将两次取回:

{"target":"foo","where":{"name":"foo"},"type":"remove"}

https://docs.strongloop.com/display/public/LB/Realtime+server-sent+events

编辑:您还可以通过内置 REST 创建和访问变更流 API

https://docs.strongloop.com/display/public/LB/PersistedModel+REST+API#PersistedModelRESTAPI-CreateChangeStream