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

时间:2019-11-28 11:48:41

标签: strapi

我有一个简单的Strapi支持的CMS,内容类型为 post 。该文档(内容类型)具有诸如标题次要标题摘录正文等字段。希望能够记录此文档中每个条目的观看次数。

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

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

我了解beforeFetch方法内的任何代码段应在执行fetch查询在GraphQL中执行的任何post操作之前触发并执行。但是,尽管进行了几次提取,该字段中的值仍保持不变。任何Strapi开发人员可以提出我要去哪里的想法吗? 完整的代码可以在https://github.com/amitschandillia/proost/blob/master/dev/api/post/models/Post.js上找到。

PS :我正尝试在https://dev.schandillia.com/graphql的GraphQL Playground中执行的查询是:

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

1 个答案:

答案 0 :(得分:1)

为此,我建议您理解这个概念https://strapi.io/documentation/3.0.0-beta.x/concepts/customization.html

然后,您必须自定义Post API的findOne控制器功能。

在这里,您将找到要udpate的默认功能。 https://strapi.io/documentation/3.0.0-beta.x/concepts/controllers.html#extending-a-model-controller

这应该是什么样子:

路径- ./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