strapi入门——第二篇-程序员宅基地

技术标签: headless  sqlite  mysql  strapi  数据库  

使用外部数据库

strapi在默认下是安装了sqlite数据库,并且默认把数据放在.tmp/data.db中,并且被gitignore了

在团队开发中,这个二进制文件如果不被gitignore,即使覆盖或者保留双方都会崩掉,不得不重来。所以最后就变成了单独一个人管理数据库和后台了

配置

官方配置文档
目前本人用的mysql,数据库的配置在config/database.js

module.exports = ({
      env }) => ({
    
  defaultConnection: 'default',
  connections: {
    
    default: {
    
      connector: 'bookshelf',
      settings: {
    
        client: 'mysql',
        host: '数据库ip地址',
        port:  3306,
        database: 'test',
        username: '用户名',
        password: '密码',
      },
      options: {
    
        useNullAsDefault: true,
      },
    },
  },
});

在web管理系统中随便添加一条数据,就可以看到远程的数据库添加了新的表
在这里插入图片描述

strapi表默认的api

这里官方文档算是写的挺详细的

Method 路径 说明
GET /{表名} 获取该表的所有数据
GET /{表名}/:id 获取该表对应id的单个数据
GET /{表名}/count 获取该表的所有数据总数
POST /{表名} 创建该表中一条新数据
DELETE /{表名}/:id 删除该表中对应id的单个数据
PUT /{表名}/:id 更新该表中一条数据

关于通过ajax post/put relation数据的,根据设置一对多/一对一,字段的类型为number[]/number,填入对应数据的id即可

api实体文件

在api文件中,能发现我在第一篇中创建的两张表test和relation同名文件夹,并且2个的文件结构都一样
在这里插入图片描述

官方文档整理

路由配置 config/routes.json
控制器 controllers/relation.js
数据生命钩子 models/{表名}.js
数据结构 models/relation.settings.json
共享函数文件 services/{表名}.js

实际使用

路由配置

打开json文件能看到以下类似的数据结构:

{
    
  "routes": [
    {
    
      "method": "GET",
      "path": "/relations",
      "handler": "relation.find",
      "config": {
    
        "policies": []
      }
    },
    // .....
  ]
}

里面的routes的个数刚好对应默认api的6个,其中

  1. method 就是请求的方法
  2. path 请求的路径
  3. handler 请求用到的方法,在这里为relation.find,表示会用到在relation文件夹下的controllers/{表名}.js中的find函数。但默认下find函数已经在系统中存在了,所以controllers/{表名}.js中没有find函数
  4. config.policies 并没有用过,可以自己看文档

一些小技巧

  1. handler中也可以设置test.findFn,由此特性可以创建一个新的空表在里面单独设置pathhandler
  2. 欢迎讨论

控制器

路由配置文件的handler就是指向这里module.exports中的函数。
在这里我写个例子:
relation数据
在这里插入图片描述
r1和r2aaaa分别关联test表的title1和title2
routes.json

{
    
  "routes": [
    {
    
      "method": "GET",
      "path": "/relations/testFn",
      "handler": "relation.testFn",
      "config": {
    
        "policies": []
      }
    },
    // .....
  ]
}

controllers/relation.js

module.exports = {
    
    async testFn(){
    
        let dataList = await strapi.query('relation').find({
    retitle:'r2aaaa'})
        return dataList
    }
};

查询结果
在这里插入图片描述

记得去public开放该接口


其中的坑或注意项

  1. relation.js文件中的strapi变量是strapi给每个js文件中混入的全局变量
  2. strapi.query('表名')中的表名并不局限本文件夹中,relation中可以查找test表
  3. services/{表名}.js就是个可以存我上面relation.js写的方法,该文件用或不用都是可以的

剩下的三个文件

并没有怎么用不清楚哦

query方法

query方法官方文档
简单来说就是过滤排序,如果只是比较简单的过滤用这个比上面写方法要快得多
例子:/relations?id=1,过滤出id === 1的数据

query附带条件

属性后面带_${方法},例子/relations?id_ne=1

方法 说明 说明
ne 不等于
lt 小于 对比数字/日期类型
gt 大于 对比数字/日期类型
lte 小于等于
gte 大于等于
in Included in an array 包含多个同属性等值过滤,如/relations?id_in=3&id_in=6&id_in=8
nin Not included in an array 没用过
contains 包括 一般用于搜索功能
ncontains 不包括
containss 包括,大小写敏感
ncontainss 不包括,大小写敏感
null Is null or not null 没用过

排序

目前就两种,用法为_sort=${属性}:${排序方式},例子:/relations?_sort=id:ASC;看官网还能多排,但没这个条件用过/users?_sort=email:DESC,username:ASC

  • ASC 正排序
  • DESC 逆排序

数量限制

大部分用来弄翻页功能的,很简单就全列出来了

例子:/relations?_start=10&_limit=30,这里要说明的是limit这个不设置默认好像是返回列表最大20个,只有设置了-1才返回所有

为api接口上缓存

strapi的后端框架koa并没怎么用,之前都是用的express的apicache,但可以使用转化包把express的中间件使用在koa中
需要的两个库:koa-connectapicache
配置位置:/config/functions/bootstrap.js

var e2k = require('koa-connect'),
    cache = require('apicache').middleware

var midd = e2k(cache('1 minutes'))
module.exports = () => {
    
    strapi.app.use(midd)
};
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41535611/article/details/107912549

智能推荐

Swish & hard-Swish_swish和hardswish-程序员宅基地

文章浏览阅读1.5w次,点赞2次,收藏18次。当β = 0时,Swish变为线性函数f(x)=x/2β → ∞, σ(x)=(1+exp(−x))−1σ(x)=(1+exp⁡(−x))−1为0或1. Swish变为ReLU: f(x)=2max(0,x)所以Swish函数可以看做是介于线性函数与ReLU函数之间的平滑函数. beta是个常数或者可以训练的参数。其具有无上界有下界、平滑、非单调的特性。其在模型效果上优于ReLU。ha..._swish和hardswish

视频教程-《ACM竞赛-C/C++入门》 C语言-2-C/C++-程序员宅基地

文章浏览阅读153次。《ACM竞赛-C/C++入门》 C语言-2 毕业于清华大学,曾担任Googl..._,c++ 语言本身比较难学,语法特性很多,这里推荐一个acm大佬的免费课程,可以试听下,

Python安装路径下的Scripts文件夹为空_python scripts 是空的-程序员宅基地

文章浏览阅读4.7k次,点赞3次,收藏8次。此问题可导致不可使用pip解决方法:cmd 中输入:python -m ensurepipScripts文件夹下就出现 pip的exe 文件,配置好环境变量(把本路径加到path下),pip就可以使用了_python scripts 是空的

【Daily Games——工具篇】:LuaStudio的简易上手教程-程序员宅基地

文章浏览阅读2.4k次。实习第二天Lua直接上手体验,各种嵌套的内容像html实际代码体验类似c上手luastudio,增加断点调试,修改逻辑发现bug最近登录角色level显示错误创建自定义位置解决项目,导入项目文件夹。添加现有项Unity此时没有运行代码,调试窗口附加到进程,启动调试右侧会显示调用方法。 实习第三天涉及问题 :UI错位问题 其中宝箱尺..._luastudio

oracle启动/关闭/查看监听+启动/关闭/查看数据库实例命令_oracle启动监听-程序员宅基地

文章浏览阅读9.9k次,点赞5次,收藏29次。(1)以sys用户登录oracle—— sqlplus / as sysdba。(2)查看监听—— lsnrctl status。(1)启动监听—— lsnrctl start。(3)关闭监听—— lsnrctl stop。(3)关闭数据库实例—— shutdown。(2)开启数据库实例—— startup。(4)退出sql命令行界面—— quit。启动oracle第一步启动监听,第二步启动数据库实例。_oracle启动监听

JavaWeb网上书城项目_javaweb网上书店-程序员宅基地

文章浏览阅读2w次,点赞131次,收藏671次。一、需求分析用JSP/Servlet技术开发一个网上书店,主要完成以下功能:用户:注册与登录,用户信息的修改图书:图书显示,图书的购买,购物车的管理。图书的添加,删除,查询二、系统设计1)创建相关的数据库表;2)使用MVC架构或者JSP+JavaBean,至少一个功能模块使用MVC;3)在JSP中综合使用EL 表达式,JSTL标记库,JavaBean ;4)使用过滤器完成请求参数编码的设置或登录权限的控制;5)正确完成Servlet和过滤器的配置6)使用数据库连接池进_javaweb网上书店

随便推点

【C语言】--求一个3 * 3矩阵对角线元素之和_c语言求一个3×3矩阵对角线元素之和。-程序员宅基地

文章浏览阅读6.7k次,点赞7次,收藏47次。利用双重for循环控制输入二维数组,再将 a[ i ][ i ]累加后输出。求一个3 * 3矩阵对角线元素之和。_c语言求一个3×3矩阵对角线元素之和。

(1)从键盘循环录入录入一个字符串,输入“end“表示结束 (2)将字符串中大写字母变成小写字母,小写字母变成大写字母,其它字符用“*“代替,并统计字母的个数 举例: 键盘录入:Hello_换行不表示结束符,做字符统计,但用一个特殊的字符串“#end”来表示结束符,该结束-程序员宅基地

文章浏览阅读633次。(1)从键盘循环录入录入一个字符串,输入"end"表示结束(2)将字符串中大写字母变成小写字母,小写字母变成大写字母,其它字符用"*"代替,并统计字母的个数举例:键盘录入:Hello12345World输出结果:hELLO*****wORLD总共10个字母package test7_2;import java.util.Scanner;public class Demo02 { public static void main(String[] args) { while(true_换行不表示结束符,做字符统计,但用一个特殊的字符串“#end”来表示结束符,该结束

CSS中1px分割线处理_分割线1px-程序员宅基地

文章浏览阅读4.7k次。 1. 1px 边框变粗问题截图如下(iPhone 6截图):如果我们把上图与我们手机系统上的 1px 边框进行对比,如下图:我们会发现,上面两个上下线条,下线条的粗细才是正确的,上线条就显得有点粗了。但是上线条我们是用纯正的 1px border生成的,而下线条我们实际是采用transform压缩了1px高度的一半模拟实现的,也就相当于 0.5px 的高度了。为什么会这样..._分割线1px

git灰度发布版本_一键实现自动化部署(灰度发布)实践-程序员宅基地

文章浏览阅读143次。在过去几年的DevOps的浪潮中,自动化、持续集成这两个概念早已深入人心(互联网技术人)。比尔盖茨先生曾经都说过:“任何技术在一个业务中使用的第一条规则就是,将自动化应用到一个高效的操作上将会放大高效。第二条就是自动化应用到一个低效操作上,则放大了低效率。”自动化部署也逐渐成为各中小型企业追求的方向,那么,今天民工哥就自动化部署的概述、自动化部署的工具、自动化部署的流程、自动化部署实践等4个方面,..._git 自动发布工具

通用RPC方案-程序员宅基地

文章浏览阅读37次。其中ServerChannelInitializer的initChannel为触发read事件时,在SerializeAdapterDecoder的decode方法的最后一个中加入ServerChannelHandler 继承 ChannelInboundHandlerAdapter继续处理read事件时,在ServerChannelHandler 的channelRead方法中使用线程池来处理读到的数据(可能是耗时操作)从而来保证不会由于处理请求导致work线程全部耗尽,而出现等待的情况。

OpenCasCade 从零开始到生成MFC单文档测试程序_wnt_wdriver.hxx-程序员宅基地

文章浏览阅读5.9k次,点赞4次,收藏17次。1.下载1.1. 安装程序 OpenCASCADExxx.exe(xxx为最新版本号,下同): http://www.opencascade.org/getocc/download/loadocc/1.2.文档OCCTDocumentationxxx.exe(xxx为最新版本号,下同): http://www.opencascade.org/getocc/download/_wnt_wdriver.hxx

推荐文章

热门文章

相关标签