How to populate creator fields such as createdBy and updatedBy

页面摘要: 在内容类型的 schema(模式)中启用 populateCreatorFields 选项,并创建一个 route middleware(路由中间件),以在 REST API 响应中包含 createdBy 和 updatedBy 字段。

creator 字段(创建者字段)createdBy 和 updatedBy 默认会从 REST API 响应中移除。通过在内容类型级别激活 populateCreatorFields 参数,可以在 REST API 中返回这 2 个字段。

NOTE

populateCreatorFields 属性在 GraphQL API 中不可用。

只有以下字段会被联表加载(populate):id、firstname、lastname、username、preferedLanguage、createdAt 和 updatedAt。

要将 createdBy 和 updatedBy 添加到 API 响应中:

  1. 打开内容类型的 schema.json 文件。
  2. 将 "populateCreatorFields": true 添加到 options 对象中:
"options": {
    "draftAndPublish": true,
    "populateCreatorFields": true
  },
  1. 保存 schema.json。
  2. 使用 generate CLI 或手动在 ./src/api/[content-type-name]/middlewares/[your-middleware-name].js 中创建一个新文件,来创建一个新的 route middleware(路由中间件)。
  3. 添加以下代码,你可以根据自己的需要修改此示例:
"use strict";

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

    await next();
  };
};
  1. 修改你的默认 route 工厂(route factory),在你要应用此联表加载的指定路由上启用该中间件,并将内容类型/中间件名称替换为你自己的名称:
"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 请求将默认包含 createdBy 或 updatedBy 字段。