【问题标题】:Components not included in Strapi api responseStrapi api 响应中未包含的组件
【发布时间】:2022-01-11 21:22:44
【问题描述】:

我今天决定将 Strapi 用作我的投资组合的无头 CMS,但我遇到了一些问题,我似乎无法在网上找到解决方案。也许我太无能了,无法真正找到真正的问题。

我已经为我的项目设置了一个架构,该架构将存储在 Strapi 中(一切都在网络中完成),但我的自定义组件存在一些问题,也就是说,它们不是 API 响应的一部分当我通过邮递员运行它时。 (不仅是空键,而且根本不包含在响应中)。所有其他非组件的字段都按预期填写。

起初我以为这可能与权限有关,但一切都已启用,所以不可能是这样,我也尝试在代码中查看 API,但记录答案并没有包含组件。

这是架构中一些字段的图像,但更重要的是响应中未包含的组件。

所以我的问题是,我是否需要在项目中创建某种解析器或任何东西才能包含这些字段,或者为什么不包含它们?

提前谢谢你!

【问题讨论】:

    标签: content-management-system strapi headless


    【解决方案1】:

    我遇到了同样的问题,并且能够通过将 populate=* 添加到 API 端点的末尾来解决它。

    例如:

    http://localhost:1337/api/test?populate=*
    

    更多信息在这里:https://forum.strapi.io/t/cannot-see-media-field-in-my-endpoint-for-my-content-type/13082/2

    编辑: 只有第一级关系用 populate=* 填充。使用 LHS 括号语法(即 [populate]=*)进行更深的填充:

    例如:

    http://localhost:1337/api/test?populate[TestExamples][populate]=*
    

    如果您转到关系人口,请在此处了解更多信息:https://docs.strapi.io/developer-docs/latest/developer-resources/database-apis-reference/rest-api.html#fields-selection

    【讨论】:

    • 啊太棒了!谢谢,这有效! :D
    • 我可以使用 createdAt 升序和降序对填充的数据进行排序吗?我想要最近的数据。 localhost:1337/api/categories/…
    • 谢谢,我花了一上午的时间来寻找这个解决方案,我是 Strapi 的新手
    【解决方案2】:

    只是为了补充已接受的答案,如果您正在使用大量嵌套集合或嵌套组件(例如在单一类型中使用大量自定义组件),那么编写自定义控制器可能是值得的。

    我需要渲染一个主页,其中包含一个“标题”组件,并且该标题有两个可重复的嵌套“按钮”组件。此外,我想呈现一个“客户”的集合,这是一个一对多的关系。

    由于这个数据结构不会经常变化,我只是写了一个自定义的控制器,所以前端不用担心这个。

    假设您创建了一个 Homepage Single Type 来呈现您的主页,控制器将在以下目录中可用:/src/api/homepage/controllers/homepage.js

    在下面的示例中,我想用嵌套的header_imagebuttons 渲染Header 组件,以及用嵌套的clients 集合渲染Clients 组件。

    const { createCoreController } = require('@strapi/strapi').factories;
    
    module.exports = createCoreController('api::homepage.homepage', ({ strapi }) => ({
        async find(ctx) {
            const populateList = [
                'Header.header_image',
                'Header.buttons',
                'Clients.clients'
            ]
            // Push any additional query params to the array
            populateList.push(ctx.query.populate)
            ctx.query.populate = populateList.join(',')
    
            const content = await super.find(ctx)
            return content
        }
    }));
    

    Strapi V3 和 V4 之间似乎存在显着差异,我发现关于填充嵌套组件的文档对于 V4 来说非常糟糕。我想这将在接下来的几周内更新,因为 Strapi V4 刚刚发布。

    如果有更好的方法来填充深度嵌套的组件或关系,我很乐意听到,但我希望上述内容同时也能帮助一些人。

    【讨论】:

    • 我可以使用 createdAt 升序和降序对填充的数据进行排序吗?我想要最近的数据。 localhost:1337/api/categories/…
    • 如何使用上述代码对数据进行排序?
    【解决方案3】:

    我对 Strapi 比较陌生,尤其是 V4。去年我只开发了一个版本为 3.6.8 的应用程序。除非您还没有看到问题,否则我相信我在端点调用中解决了该问题。我还必须说我还没有部署它。它只是在开发环境中。

    The data architecture

    端点调用:

    http://localhost:1337/api/profiles/?filters[user]=1&populate[0]=permissions&populate1=permissions.forms.form&populate2=permissions.quiz&populate[3]=permissions.unity&populate [4]=permissions.forms.form.Questions 块引用

    The Endpoint Call

    【讨论】:

      猜你喜欢
      • 2022-07-22
      • 1970-01-01
      • 1970-01-01
      • 2019-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多