如何在保存点击时更新KeystoneJS中的文档?

时间:2018-01-02 17:20:07

标签: node.js mongoose keystonejs

我想在更改另一个字段后更新文档中的特定字段。 我有一个产品代码和一些字段,如价格和标题,我从外部API获得。

每当有人更改后端的产品代码时,我想更新文档中的价格和标题。 首先,我尝试在架构上使用mongoose post save钩子。这导致无限循环,因为它在保存文档后不断更新并因此保存文档。 然后我实现了一个布尔值,以确保只调用一次post保存挂钩,看起来像这样:

let postSaveTriggered = false;

//update our product!
Product.schema.post('save', function(doc, next) {
    if (!postSaveTriggered) {
        postSaveTriggered = true;
        api.product.updateInfo(doc, function() { //this updates the document
            next();
        });
    } else {
        postSaveTriggered = false;
        next();
    }
});

但我只希望在用户实际更改产品代码时触发此功能,而不是在产品一般更新时触发。我还运行一个cron工作来更新产品的价格,我显然不希望在这种情况下触发post save钩子。 有没有办法用KeystoneJS后端实现我想要的东西?

1 个答案:

答案 0 :(得分:2)

找到了办法!

首先使用保存挂钩来监视产品代码中的更改:

let updateProduct = false;

Product.schema.pre('save', function(next) {
    updateProduct = this.isModified('code');
    next();
});

然后只需在updateProduct为true时更新帖子保存挂钩:

Product.schema.post('save', function(doc, next) {
    if (updateProduct) {
        updateProduct = false;
        api.product.updateInfo(doc, function() {
            next();
        });
    } else {
        next();
    }
});

对我而言,虽然看起来仍然不必要。

相关问题