使用 Strapi 中的每个获取请求更新给定字段值

Update given field value with every fetch request in Strapi

我有一个简单的 Strapi 支持的 CMS,其内容类型为 post。此文档(内容类型)包含 titlesecondary titleexcerptbody,等等。现在我希望能够记录本文档中每个条目的查看次数。

因此,我向其中添加了一个名为 views 的数字字段,默认值为 0。按照 Strapi 文档中的说明,我将以下代码添加到我的 api 模型(位于 /api/post/models/Post.js):

beforeFetchAll: async (model) => {
  model.views += 1;
},

我理解 beforeFetch 方法中的任何片段都应该在任何 fetch 操作之前触发并执行,这就是 post 查询在 GraphQL 中所做的。然而,尽管多次提取,该字段中的值保持不变。任何 Strapi 开发人员都可以告诉我哪里出错了? 完整代码可以在 https://github.com/amitschandillia/proost/blob/master/dev/api/post/models/Post.js.

找到

P.S.:我试图在 https://dev.schandillia.com/graphql 的 GraphQL Playground 中执行的查询是:

{
  posts(limit: 1, where: {slug: "one-post"}) {
    id
    title
    views
  }
}

为此,我建议您了解这个概念https://strapi.io/documentation/developer-docs/latest/development/backend-customization.html#backend-customization

那你就要自定义PostAPI的findOne控制器函数了。

在这里您可以找到要更新的默认函数。 https://strapi.io/documentation/developer-docs/latest/development/backend-customization.html#controllers

这里应该是这样的:

路径 — ./api/post/controller/Post.js

  async findOne(ctx) {
    const entity = await strapi.services.post.findOne(ctx.params);

    const sanitized = sanitizeEntity(entity, { model: strapi.models.post });

    const newView = sanitized.views + 1;
    strapi.query('post').update({ id: sanitized.id }, {
      views: newView
    });

    return sanitized;
  },

这里有一个简短的视频可以提供帮助https://www.loom.com/share/df0cb65c52b0478d994c3732fac84020