javascript 如何通过鼻涕虫获取Strapi,以及如何填充类别

dpiehjr4  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(124)

我正在尝试使用slug为一个带有strapi后端的react博客获取帖子。我创建了自定义路径和自定义控制器,但返回的值缺少一些属性,如图像和类别。当我使用帖子ID获取时,我使用查询字符串填充返回的对象,但我不知道如何将qs添加到slug API路径。
下面是自定义控制器和自定义路由

///custom controller

 async findOne(ctx) {
    const { slug } = ctx.params;
    const { query } = ctx;

  
    const entity = await strapi.service('api::article.article').findOne(slug, query);
    const sanitizedEntity = await this.sanitizeOutput(entity, query);
    return this.transformResponse(sanitizedEntity);
  }

///Custom Route
  {
        method: 'GET',
        path: '/articles/slug/:slug',
        handler: 'custom-controller.findOne',
        config: {
          policies: []
        },

这是我如何从客户端中获取useEffect

useEffect(()=>{
        const fetchData = async()=>{
            // const query = qs.stringify({
            //     populate: '*', 
            //     }, {
            //     encodeValuesOnly: true,
            //     });
            const res = await axios.get(`http://localhost:1337/api/articles?filters[slug][$eq]=${slug}`)
            console.log(res.data)
            updateState(res.data) 
            
        }
        fetchData()
        setLoading(false)
    },  [slug])

我也尝试过使用实体API服务,但是我就是不能让它工作。我该如何填充对象以包含这些缺失的属性?

pexxcrt2

pexxcrt21#

使用Strapi v4,您可以这样做

    • 1.在src/api/article/_custom.js中创建一个文件**
  • 请注意,我加下划线是因为:*

路由文件按字母顺序加载。要在核心路由之前加载自定义路由,请确保正确命名自定义路由(例如01-custom-routes.js和02-core-routes.js)。
图片来源:www.example.comhttps://docs.strapi.io/developer-docs/latest/development/backend-customization/routes.html#creating-custom-routers

module.exports = {
  routes: [
    {
      method: 'GET',
      path: '/articles/:slug',
      handler: 'article.findOne',
      config: {
        auth: false
      },
    }
  ]
}
    • 2.编辑src/api/article/controllers/article.js**
'use strict';

/**
 * article controller
 */

const { createCoreController } = require('@strapi/strapi').factories;

module.exports = createCoreController('api::article.article', ({ strapi }) => ({
  // Query by slug
  async findOne(ctx) {
    // thanks to the custom route we have now a slug variable
    // instead of the default id
    const { slug } = ctx.params;
    const entity = await strapi.db.query('api::article.article').findOne({
      where: { slug }
    });
    const sanitizedEntity = await this.sanitizeOutput(entity, ctx);

    return this.transformResponse(sanitizedEntity);
  },
}));

1.现在你可以这样调用你的api:
http://localhost:1337/api/articles/my-beautiful-article-about-orange
参考:https://www.youtube.com/watch?v=OVV0CfgX6Qk

  • 注意:在视频中,custom.js在post.js之前加载^^*

相关问题