使用 Strapi 中的每个获取请求更新给定字段值
Update given field value with every fetch request in Strapi
我有一个简单的 Strapi 支持的 CMS,其内容类型为 post。此文档(内容类型)包含 title、secondary title、excerpt、body,等等。现在我希望能够记录本文档中每个条目的查看次数。
因此,我向其中添加了一个名为 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
我有一个简单的 Strapi 支持的 CMS,其内容类型为 post。此文档(内容类型)包含 title、secondary title、excerpt、body,等等。现在我希望能够记录本文档中每个条目的查看次数。
因此,我向其中添加了一个名为 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