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

智能推荐

python程序化交易实例-python程序化交易神器——tushare-程序员宅基地

文章浏览阅读1.1k次。一直想试着将自己的交易思路程序化,可惜困难重重 ,连第一步获取数据都要花很多精力,直到最近发现了Tushare,不仅使用非常便利,功能也无比强大,股票、期货、基金、财经新闻,甚至电影票房等都可以非常便捷的获取,更难得的是这么强大的存在居然是开源免费的,不得不说国人的开源项目越来越强大了!不废话了,简单介绍下用法:一、安装使用前提安装Python安装pandaslxml也是必须的,正常情况下安装了A..._python期货自动化交易

shell基本案例-程序员宅基地

文章浏览阅读128次。2019独角兽企业重金招聘Python工程师标准>>> ..._shell change master to

视频教程-Thinkphp3.2.3+Bootstrap初级入门到商城实战-PHP-程序员宅基地

文章浏览阅读234次。Thinkphp3.2.3+Bootstrap初级入门到商城实战 7年php..._thinkphp bootstrap 外贸商城定制

视频教程-微信小程序支付java-Java-程序员宅基地

文章浏览阅读354次。微信小程序支付java 我是一名java高级开发工程师,已有七年的工作经验,..._微信小程序支付教学视频

HarmonyOS Next从入门到精通实战精品课

Canvas完成矩形的绘制;华为闹钟的订阅和取消;华为闹钟的基本绘制;华为闹钟的时针-分针-秒针的绘制;华为闹钟的任务列表的样式;关于State的状态更新的须知;关于样式的简单介绍;关于vp和fp的介绍;知乎数据的真实的渲染;实现底部组件的封装;华为闹钟的添加闹钟;完成知乎小案例的UI布局;ForEach的商品列表案例;ForEach的商品列表的Grid布局;ForEach的key的一个简单介绍;Watch的刷题案例-做题的思路;State嵌套更新的实现方式;你画我猜的签字板实现;

vue2实现复制粘贴功能

【代码】vue2实现复制粘贴功能。

随便推点

【嵌入式开发 Linux 常用命令系列 12 -- linux 下 log 输出重定向 详细介绍 】_linux默认日志/var/log,如何重定向到其他地方-程序员宅基地

文章浏览阅读1k次。在Linux中,每个命令都有两个输出通道标准输出(stdout标准错误输出(stderr默认情况下,这两个输出通道都会输出到终端。你可以使用重定向操作符和>>将命令的标准输出重定向到一个文件,而忽略标准错误输出。会把command的标准输出写入文件output.txt,如果output.txt已经存在,它的内容会被覆盖;则会把标准输出添加到文件output.txt的尾部。如果你想把标准错误输出也重定向到文件,可以使用2>和2>>操作符。例如,会把command的标准错误输出写入文件。_linux默认日志/var/log,如何重定向到其他地方

在Linux下搭建自己的私有maven库并部署和发布自定义jar依赖和自定义maven插件(一)搭建Sonatype Nexus私有库_sonatype nexus repository 操作说明-程序员宅基地

文章浏览阅读2.2k次,点赞66次,收藏34次。我们在使用maven时,在pom.xml文件里面有个repositories的配置,这个配置可以来指定我们的依赖包下载的地址,我们常用的比如有阿里云镜像、华为云镜像地址等。这些地址能给我们提供更好的网络访问,但是当有时我们也需要自己的镜像库,比如我们自己开发的一个工具库只提供给公司内部使用,而又不想共享到公网上去,那这时就需要我们自己搭建一套maven的私有库。或者我们的开发环境下是不能上外网,只能链接公司的内网,这种情况也就需要我们的私有库。今天给大家分享如何大家自己的maven私有库。_sonatype nexus repository 操作说明

DIV CSS表单布局的小技巧-程序员宅基地

文章浏览阅读79次。1、DIV CSS表单文本输入的移动选择: 在文本输入栏中,如果加入了提示,来访者往往要用鼠标选取后删除,再输入有用的信息。其实只要加入 onMouseOver="this.focus()"onFocus="this.select()"代码到<textarea>中,一切 就会变得简单多了,如: 引用: <textarea name=textarea wrap=virt..._div表单区域怎么打

【海量数据挖掘/数据分析】之 决策树模型(决策树模型、决策树构成、决策树常用算法、决策树性能要求、信息增益、信息增益计算公式、决策树信息增益计算实例)_决策树中信息增益的计算-程序员宅基地

文章浏览阅读5.9k次,点赞3次,收藏29次。【海量数据挖掘/数据分析】之 决策树模型(决策树模型、决策树构成、决策树常用算法、决策树性能要求、信息增益、信息增益计算公式、决策树信息增益计算实例)一、决策树模型1、常用算法2、属性划分策略3、其他算法三、决策树算法性能要求四、 决策树模型创建 ( 递归创建决策树 )1 、 决策树模型创建2 、 决策树创建算法 ( 递归 )3 、 递归操作4 、 递归停止的条件五、 决策树 树根属性 选择六、信息增益 说明1、 熵 和 信息 的数据组成2 、 信息增_决策树中信息增益的计算

2024年钉钉直播回放怎么下载

又到了2024年,最近钉钉迎来了一波更新,经过我的研究,总算研究出来了一个方法,并且做成了工具首先,让我们了解一下钉钉直播回放的下载方法。钉钉直播回放工具链接:https://pan.baidu.com/s/1oPWJOp8L2SBDlklt_t5WQQ?pwd=1234提取码:1234--来自百度网盘超级会员V10的分享1.解压好我给大家准备好的压缩包。

html修改麦克风采集率,怎么获取麦克风实时输入音量,并转换为百分比-程序员宅基地

文章浏览阅读295次。C/C++ codeint DeviceManager::getAudioInputVolumn( const std::string &deviceName ){MMRESULT rc; // 多媒体函数返回结果变量HMIXER hMixer; // 混合器设备句柄MIXERLINE mxl; // 音频线路标准状态信..._c++获取麦克风输入音量