如何填充创作者字段

了解如何通过创建利用 populate 参数的自定义控制器来填充创建者字段,例如 createdBy 和 updatedBy。

🛠️ 如何填充创建者字段,例如 createdByupdatedBy

默认情况下,创建者字段 createdByupdatedBy 已从 REST API 响应中删除。 通过在内容类型级别激活 populateCreatorFields 参数,可以在 REST API 中返回这 2 个字段。

GraphQL API 无法使用 populateCreatorFields 属性。

仅会填充以下字段:idfirstnamelastnameusernamepreferedLanguagecreatedAtupdatedAt

要将 createdByupdatedBy 添加到 API 响应:

  1. 打开内容类型 schema.json 文件。
  2. "populateCreatorFields": true 添加到 options 对象:
json
{
  "options": {
    "draftAndPublish": true,
    "populateCreatorFields": true
  }
}
  1. 保存 schema.json
  2. 使用 generate CLI 或手动在 ./src/api/[content-type-name]/middlewares/[your-middleware-name].js 中创建新的路由中间件
  3. 添加以下代码,您可以修改此示例以满足您的需求:
./src/api/test/middlewares/defaultTestPopulate.js
js
'use strict'

module.exports = (config, { strapi }) => {
  return async (ctx, next) => {
    if (!ctx.query.populate) {
      ctx.query.populate = ['createdBy', 'updatedBy']
    }

    await next()
  }
}
  1. 修改您的默认路由工厂以在您希望此人群应用到的特定路由上启用此中间件,并替换将 content-type/middleware 名称替换为您的名称:
./src/api/test/routes/test.js
js
'use strict'

const { createCoreRouter } = require('@strapi/strapi').factories

module.exports = createCoreRouter('api::test.test', {
  config: {
    find: {
      middlewares: ['api::test.default-test-populate'],
    },
    findOne: {
      middlewares: ['api::test.default-test-populate'],
    },
  },
})

没有 populate 参数的 REST API 请求默认将包含 createdByupdatedBy 字段。