Вы можете кинуть мне донат на кофe, если нашли что-то полезное для себя на этом сайте. Спасибо 🙏
Угостить кофе
отсканируйте QR-код или нажмите на кнопку
При использовании связки Next.js и Strapi вы скорее всего захотите получить записи не по id, которое используется по умолчанию методом findOne, а по slug.
Решение выглядит следующим образом:
Для каждого типа записи создаем кастомный роут, например, для постов.
src/api/post/routes/01custom.js
module.exports = {
routes: [
  {
    method: "GET",
    path: "/posts/:slug",
    handler: "api::post.post.findBySlug",
  },
],
};И кастомный контроллер.
src/api/post/controllers/post.js
'use strict';
 
/**
* work controller
*/
const { sanitize } = require('@strapi/utils');
const { createCoreController } = require('@strapi/strapi').factories;
 
module.exports = createCoreController('api::post.post', ({ strapi }) => ({
async findBySlug(ctx) {
  const { slug } = ctx.params;
  const query = {
    filters: { slug },
    ...ctx.query,
  };
 
  const post = await strapi.entityService.findMany('api::post.post', query);
  const schema = strapi.getModel('api::post.post');
  const sanitizedEntity = await sanitize.contentAPI.output(post, schema);
 
  return this.transformResponse(sanitizedEntity[0]);
},
}));src/api/post/controllers/post.js
'use strict';
 
/**
* work controller
*/
const { sanitize } = require('@strapi/utils');
const { factories } = require('@strapi/strapi');
 
module.exports = factories.createCoreController('api::post.post', ({ strapi }) => ({
async findBySlug(ctx) {
  const { slug } = ctx.params;
  const query = {
    filters: { slug },
    ...ctx.query,
  };
 
  const post = await strapi.documents('api::post.post').findMany(query);
  const schema = strapi.getModel('api::post.post');
 
  const sanitizedEntity = await strapi.contentAPI.sanitize.output(post, schema);
  console.log(sanitizedEntity);
 
  return this.transformResponse(sanitizedEntity[0]);
},
}));ВНИМАНИЕ: не забудьте включить разрешение для findBySlug в разделе Strapi Admin > Settings > Roles > Public
Вы можете кинуть мне донат на кофe, если нашли что-то полезное для себя на этом сайте. Спасибо 🙏
отсканируйте QR-код или нажмите на кнопку