strapi - 在 Strapi v4 中自定义填充的最佳方法是什么?

标签 strapi populate

本质上我想要完成的是:

默认情况下,如果没有传递“includes”查询参数,我只想将模型中的所有内容填充到下一层,以包含所有组件、关系等。我知道这可以通过“populate:星星”。但是,如果在包含中传递字段/对象/数组,我仍然希望将所有内容填充到下一级(即“填充:星号”),但最重要的是,我想包含在包含中传递的任何内容也仅查询参数。这对我来说不起作用,因为第二次填充总是覆盖“填充:'*'”。彻底浏览了 Strapi 文档后,我没有看到任何方法可以结合这两种场景,那么完成这样的事情以动态处理多级深度填充但仅针对指定关系的最佳方法是什么?

最佳答案

您还可以在中间件中预定义填充逻辑,以填充内容的所有项目。但您也可以通过从前端传递的查询参数进行覆盖。

这是一个示例中间件。我没有实现您正在寻找的确切逻辑,但这可以给您一些想法。

"use strict";

/**
 * `landing-page-populate` middleware
 */

const populate = {
  metadata: {
    populate: {
      metaImage: {
        populate: true,
        fields: ["name", "alternativeText", "url"],
      },
    },
  },
  blocks: {
    populate: {
      link: {
        populate: true,
      },
      image: {
        fields: ["name", "alternativeText", "url"],
      },
      card: {
        populate: {
          image: {
            fields: ["name", "alternativeText", "url"],
          },
        },
      },
      plan: {
        populate: ["services", "link"],
      },
      form: {
        populate: ["input", "button"],
      },
    },
  },
};

module.exports = (config, { strapi }) => {
  // Add your own logic here.
  return async (ctx, next) => {
    strapi.log.info("In landing-page-populate middleware.");
    ctx.query = {
      populate,
      ...ctx.query,
    }
    await next();
  };
};

如果您想了解如何在中间件中处理填充的另一个示例,请查看此博客文章。 https://strapi.io/blog/route-based-middleware-to-handle-default-population-query-logic

如果您需要回顾一下 Strapi 中如何完成填充和过滤,您还可以查看这篇关于填充和过滤的文章 https://strapi.io/blog/demystifying-strapi-s-populate-and-filtering

关于strapi - 在 Strapi v4 中自定义填充的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77052492/

相关文章:

node.js - 如何在 Strapi 中安全地设置数据库密码?

javascript - Strapi 上传的文件未显示在网站上

javascript - Strapi 自定义身份验证 Controller

javascript - 从其他文本字段javascript填充隐藏字段

php - 用动态内容填充网站的一部分

node.js - 填充时连接字符串

node.js - 本地主机 :1337 become in production? 是什么意思

strapi - 如何仅返回Strapi中选定的某些字段?

java - 如何将修改后的预序树遍历数据填充到 Java 树对象中?

c# - 使用 WinForms TreeView 的递归目录列表?