Strapi实现根据slug查找记录

2023年09月15日

Strapi 默认情况下查找单条记录,是根据 id 来查询的,那么在我们的博客系统里,我们需要的一般是通过slug这种字段来进行查询的,如何实现呢?

本文以Posts为例,slug字段的创建不再赘述。

第一步,先定义路由

在源码目录 src/api/post/routes 新建一个 _custom.js 文件

module.exports = {
  routes: [
    {
      method: 'GET',
      path: '/posts/:slug',
      handler: 'post.findOne',
      config: {
        auth: false
      },
    }
  ]
}

第二步,实现控制器方法

修改源码目录的 src/api/post/controllers 里的 post.js 文件

'use strict';

/**
 * post controller
 */

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

module.exports = createCoreController('api::post.post', ({ strapi }) => ({
  async findOne(ctx) {
    const { slug } = ctx.params;
    const { query } = ctx;

    const entity = await strapi.db.query('api::post.post').findOne({
      where: {slug}
    })

    const sanitizedEntity = await this.sanitizeOutput(entity);

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

重启控制台,那么请求原来的/api/posts/文章id 将会返回 404, 而请求 /api/posts/文章slug 将会返回记录。

 

© 1987 - 2023 张晓刚 版权所有

浙ICP备16002143号-1