为什么要进行后端定制呢?

在实际开发过程中,项目中有些需求是不需要创建界面化接口的,需要我们定制化自己的业务逻辑,那么我们该如何处理这个需求呢?本文以图文并茂的形式,定制一个我们自己的业务逻辑接口。

Strapi后端的每个部分都可以定制:

  • Strapi服务器收到的请求
  • 处理请求并触发控制器处理程序执行的路由
  • 可以阻止访问路由的策略
  • 中间件可以在向前移动之前控制请求流和请求
  • 一旦到达路由就执行代码的控制器
  • 用于构建控制器可重用的自定义逻辑的服务
  • 模型是内容数据结构的表示
  • 发送给应用程序的响应

详情可参考文档:https://docs.strapi.io/developer-docs/latest/development/backend-customization/controllers.html#adding-a-new-controller
想要自定义一个接口,我们至少需要routes和controllers两个部分来实现,但是我们还可以添加Service 来协助controller负责其他业务逻辑处理
每个controller里面的action都可以是一个异步或同步函数。每个操作都接收一个上下文对象(ctx)作为参数。CTX包含请求上下文和响应上下文。

Controller 和 Service

  • Controller 负责搜集参数、调用服务、转发或重定向结果集,
  • Service 负责其他业务逻辑处理

举例:我们需要创建public-info相关的接口

我们在src\api目录下创建这些文件

src\api\public-info\routes\public-info.ts
这里暂时设置为公共接口,用来测试,后续会写其他文章来讲解如何配置权限

module.exports = {
    routes: [
        method: 'GET',
        path: '/public-info',
        handler: 'public-info.getPublicInfo',
        config: {
          auth: false,

Controller文件

src\api\public-info\controllers\public-info.ts

module.exports = {
  getPublicInfo: async (ctx, next) => {
        ctx.body  = await strapi.services['api::public-info.public-info']['getPublicInfo'](ctx.query)

Service文件

src\api\public-info\services\public-info.ts

module.exports = () => ({
  getPublicInfo: async (data) => {
    return {publicInfo: 'test message'}

创建完毕以后,我们启动服务,进行测试

访问接口http://localhost:1337/api/public-info

  • 接口返回格式我们也可以通过使用middlewares来设定所有的接口返回统一包装格式~后续会添加文章进行讲解

我们还可以添加参数来进行测试~

src\api\public-info\services\public-info.ts

大功告成~~

  • 今天就写到这里啦~小伙伴们,( ̄ω ̄( ̄ω ̄〃 ( ̄ω ̄〃)ゝ我们明天再见啦~~
  • 大家要天天开心哦

欢迎大家指出文章需要改正之处~
学无止境,合作共赢

欢迎路过的小哥哥小姐姐们提出更好的意见哇~~

用于无头CMS Strati.io的缓存中间件 这个怎么运作 该中间件基于查询参数和模型ID在来回API上缓存传入的GET请求。 每当有PUT , POST或DELETE请求进入时,缓存都会自动清除。 支持的存储引擎 内存(默认) 重要提示:必须为每个模型显式启用缓存 使用npm npm install --save strapi-middleware-cache yarn add strapi-middleware-cache 对于Strapi稳定版本,请在您的config文件夹中添加一个middleware.js文件。 touch config/middleware.js 要在每个环境中使用不同的设置,请参阅。 如果愿意,您也可以在此处解析配置的环境变量,请参阅。 通过将以下代码段添加到一个空的中间件 关于谈话 (About the Talk) Let’s build a custom API. Strapi is a Node CMS that lets us create our own APIs quickly from a clean dashboard. We don’t have to jump into Node code to crea... Strapi中间件使用Sentry 查看Strapi: : Strapi缺少的Sentry中间件。 通过使用此第三方(不是官方的Strapi)中间件,您可以在Strapi实例上使用Sentry客户端,因此您可以在应用程序中访问Sentry方法。 (只要有Strapi实例可用) 请注意,此插件尚处于早期阶段,可能会发生频繁的更新,因此您应该尝试频繁更新npm软件包! 如何安装? npm i strapi-middleware-sentry -S 如何使用? 1.将Sentry配置添加到config/middleware.js文件: 注意:该中间件使用@ sentry / node,因此请查看: : 以获取配置指南。 // ... 如果你发现的访问到的数据为null 空!fields= xxx (attributes 内部的内容 也就是你设置的属性值 例如我设置的title?或者是访问的内容 有残缺 这是因为性能存在的问题,为了解决有些图片或者添加的字段 很大很大而设计的解决方式。这时候我们就要修改对应的url 访问的路径从而获取到我们所需要的被隐藏的接口内容。当然 你也可以用这个方法去访问 其他的你所需要的 被隐藏(或者说是残缺) 的数据。那么有填充显示 被隐藏的数据 也就一定可以对应的 隐藏我们不希望显示的默认数据。 strapi.controllers 返回项目中可用的控制器的对象。位于该./api/**/controllers文件夹中的每个JavaScript文件都将被解析为该strapi.controllers对象。由于这个对象,您可以访问项目中每个控制器的所有操作 此对象不包括管理员控制器和插件的控制器。 首先创建两个api目录(过程略) 在demo中访问demo1中的控制器方法 路径 - ... strapi是什么?基于Nodejs的开源免费CMS框架。为什么选择它?基于nodejs,100%JavaScript,上手迅速可轻松创建功能强大且可自定义的API,可以使用任何喜欢的数据库 Strapi插件image-api 这是用于 headless CMS的插件,它可以帮助您在Unsplash和Giphy上搜索图像,将其导入到媒体库,并以适当的归因方式插入到Rich Text内容中。 从Unsplash导入 从Giphy导入 选项1,安装了基于React的所见即所得strapi插件 经测试支持的插件 yarn add strapi-plugin-zeasy-image-api 使用npm: npm install strapi-plugin-zeasy-image-api 配置未启动 注册一个Unsplash帐户 在Unsplash上​​创建一个应用,记下您的app name和Access Key ,稍后将使用它。 注意:一个演示应用每小时将有50个请求的限制 配置Giphy 注册Giphy帐户 在Giphy上创建一个 npm install --save @hellospruce/strapi-custom-ckeditor5 yarn add @hellospruce/strapi-custom-ckeditor5 并在trapi上使用它:在以下位置创建CKEditor组件: strapi/app/extensions/content-manager/admin/src/components/CKEditor/index.js import { CKEditor } from '@ckeditor/ckedit strapi 是什么?strapi[1]这个名字取自 bootstrap 的后缀 strap,然后因为它是一个提供快速生成安全可靠的 api 架构,然后再加了一个 i,合并就是 strapi,bootstrap 的有启动的意思,你可以用 strapi 来快速构建你的后端,可以快速让自己的项目启动。几个关键词快速 :是因为一个命令就生成了后端用户、权限、文件上传等基本的后端轮子简单:str...