【问题标题】:Get Status of database operation in 'after delete' hook在“删除后”挂钩中获取数据库操作的状态
【发布时间】:2016-03-29 03:47:31
【问题描述】:

今天我遇到了一个问题,我无法确定删除操作是否在 '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' 挂钩。 (在数据库中手动验证)

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

有没有办法得到这个?

【问题讨论】:

    标签: node.js database express loopbackjs strongloop


    【解决方案1】:

    您可以设置一个 ChangeStream,它会在服务器上的模型发生更改时发送一个事件。唯一的警告是删除,当操作成功时,您将收到一个事件,即使没有与请求匹配的记录。因此,例如,如果我尝试使用 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

    【讨论】:

    • 啊。好吧,我想如果没有什么可删除的,说它成功完成在技术上是正确的:P 谢谢!
    猜你喜欢
    • 2020-07-31
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2017-03-10
    • 2015-03-08
    相关资源
    最近更新 更多