您如何在单击保存时更新 KeystoneJS 中的文档?
How do you update a document in KeystoneJS on save click?
我想在更改另一个字段后更新文档中的特定字段。
我有一个产品代码和一些字段,例如我从外部 api 获得的价格和标题。
每当有人在后端更改产品代码时,我想更新文档中的价格和标题。
首先,我尝试在模式上使用 mongoose post 保存挂钩。这导致了无限循环,因为它在保存文档后不断更新并保存文档。
然后我实现了一个布尔值来确保 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 保存挂钩。
有什么方法可以使用 KeystoneJS 后端实现我想要的吗?
找到方法了!
首先使用pre保存钩子来观察产品代码的变化:
let updateProduct = false;
Product.schema.pre('save', function(next) {
updateProduct = this.isModified('code');
next();
});
然后仅在 post 保存挂钩中更新,当 updateProduct 为真时:
Product.schema.post('save', function(doc, next) {
if (updateProduct) {
updateProduct = false;
api.product.updateInfo(doc, function() {
next();
});
} else {
next();
}
});
对我有用,但似乎仍然没有必要复杂。
我想在更改另一个字段后更新文档中的特定字段。 我有一个产品代码和一些字段,例如我从外部 api 获得的价格和标题。
每当有人在后端更改产品代码时,我想更新文档中的价格和标题。 首先,我尝试在模式上使用 mongoose post 保存挂钩。这导致了无限循环,因为它在保存文档后不断更新并保存文档。 然后我实现了一个布尔值来确保 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 保存挂钩。 有什么方法可以使用 KeystoneJS 后端实现我想要的吗?
找到方法了!
首先使用pre保存钩子来观察产品代码的变化:
let updateProduct = false;
Product.schema.pre('save', function(next) {
updateProduct = this.isModified('code');
next();
});
然后仅在 post 保存挂钩中更新,当 updateProduct 为真时:
Product.schema.post('save', function(doc, next) {
if (updateProduct) {
updateProduct = false;
api.product.updateInfo(doc, function() {
next();
});
} else {
next();
}
});
对我有用,但似乎仍然没有必要复杂。