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

Change / validate properties before insert or update

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

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 对象。

这是验证的最佳位置吗?

如果可以,我如何在更新前修改对象?

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

以下是我建议您管理生命周期的方法。 管理 slug

的示例
// 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'))});
  }
},