我有一个简单的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
}
}
答案 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