在插入或更新之前更改/验证属性

时间:2019-09-23 17:20:05

标签: strapi

我尝试在插入和更新之前对数据进行一些自定义验证/清理。 我认为模型的生命周期回调是进行此类工作的好地方:

module.exports = {
  // Before saving a value.
  // Fired before an `insert` or `update` query.
  beforeSave: async (model) => {
    console.log('[beforeSave]', 'model', model)
    // Do something here with the model
  },

  // Before creating a value.
  // Fired before an `insert` query.
  beforeCreate: async (model) => {
    console.log('[beforeCreate]', 'model', model)
    // Do something here with the model
  },

  // Before updating a value.
  // Fired before an `update` query.
  beforeUpdate: async (model) => {
    console.log('[beforeUpdate]', 'model', model)
    // Do something here with the model
  }
};

当我插入新记录时,将同时调用beforeSavebeforeCreate方法。在这种情况下,模型是我要插入的新对象。

当我更新记录时,没有调用beforeSave方法,而调用了beforeUpdate方法,但是模型不是我要保存的对象。在这种情况下,模型是Query对象。

这是进行验证的最佳地点吗?

如果是的话,如何在更新之前修改对象?

我在MongoDB上使用Strapi v3.0.0-beta.16.3。

1 个答案:

答案 0 :(得分:3)

这是我建议您管理自己的生命周期的方法。 管理子弹的例子

// const slugify = require('slugify');

beforeSave: async (model) => {
  if (model.title) {
    model.slug = slugify(model.title);
  }
},
beforeUpdate: async (model) => {
  if (model.getUpdate().title) {
    model.update({
      slug:  slugify(model.getUpdate().title)
    });
  }
},

对于SQL连接,可以选择:

beforeSave: async (model) => {
  if (model.get('title')) {
    model.set({slug: slugify(model.get('title'))});
  }
},