技术标签: 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管理系统中随便添加一条数据,就可以看到远程的数据库添加了新的表
这里官方文档算是写的挺详细的
Method | 路径 | 说明 |
---|---|---|
GET | /{表名} | 获取该表的所有数据 |
GET | /{表名}/:id | 获取该表对应id的单个数据 |
GET | /{表名}/count | 获取该表的所有数据总数 |
POST | /{表名} | 创建该表中一条新数据 |
DELETE | /{表名}/:id | 删除该表中对应id的单个数据 |
PUT | /{表名}/:id | 更新该表中一条数据 |
关于通过ajax post/put relation数据的,根据设置一对多/一对一,字段的类型为number[]/number,填入对应数据的id即可
在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个,其中
method
就是请求的方法path
请求的路径handler
请求用到的方法,在这里为relation.find
,表示会用到在relation文件夹下的controllers/{表名}.js
中的find函数。但默认下find函数已经在系统中存在了,所以controllers/{表名}.js
中没有find函数config.policies
并没有用过,可以自己看文档一些小技巧
handler
中也可以设置test.findFn
,由此特性可以创建一个新的空表在里面单独设置path
和handler
路由配置文件的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开放该接口
其中的坑或注意项
relation.js
文件中的strapi变量是strapi给每个js文件中混入的全局变量strapi.query('表名')
中的表名并不局限本文件夹中,relation中可以查找test表services/{表名}.js
就是个可以存我上面relation.js
写的方法,该文件用或不用都是可以的并没有怎么用不清楚哦
query方法官方文档
简单来说就是过滤排序,如果只是比较简单的过滤用这个比上面写方法要快得多
例子:/relations?id=1
,过滤出id === 1的数据
属性后面带_${方法}
,例子/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
大部分用来弄翻页功能的,很简单就全列出来了
例子:/relations?_start=10&_limit=30
,这里要说明的是limit这个不设置默认好像是返回列表最大20个,只有设置了-1才返回所有
strapi的后端框架koa并没怎么用,之前都是用的express的apicache,但可以使用转化包把express的中间件使用在koa中
需要的两个库:koa-connect、apicache
配置位置:/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)
};
文章浏览阅读1.1k次。一直想试着将自己的交易思路程序化,可惜困难重重 ,连第一步获取数据都要花很多精力,直到最近发现了Tushare,不仅使用非常便利,功能也无比强大,股票、期货、基金、财经新闻,甚至电影票房等都可以非常便捷的获取,更难得的是这么强大的存在居然是开源免费的,不得不说国人的开源项目越来越强大了!不废话了,简单介绍下用法:一、安装使用前提安装Python安装pandaslxml也是必须的,正常情况下安装了A..._python期货自动化交易
文章浏览阅读128次。2019独角兽企业重金招聘Python工程师标准>>> ..._shell change master to
文章浏览阅读234次。Thinkphp3.2.3+Bootstrap初级入门到商城实战 7年php..._thinkphp bootstrap 外贸商城定制
文章浏览阅读354次。微信小程序支付java 我是一名java高级开发工程师,已有七年的工作经验,..._微信小程序支付教学视频
Canvas完成矩形的绘制;华为闹钟的订阅和取消;华为闹钟的基本绘制;华为闹钟的时针-分针-秒针的绘制;华为闹钟的任务列表的样式;关于State的状态更新的须知;关于样式的简单介绍;关于vp和fp的介绍;知乎数据的真实的渲染;实现底部组件的封装;华为闹钟的添加闹钟;完成知乎小案例的UI布局;ForEach的商品列表案例;ForEach的商品列表的Grid布局;ForEach的key的一个简单介绍;Watch的刷题案例-做题的思路;State嵌套更新的实现方式;你画我猜的签字板实现;
【代码】vue2实现复制粘贴功能。
文章浏览阅读1k次。在Linux中,每个命令都有两个输出通道标准输出(stdout标准错误输出(stderr默认情况下,这两个输出通道都会输出到终端。你可以使用重定向操作符和>>将命令的标准输出重定向到一个文件,而忽略标准错误输出。会把command的标准输出写入文件output.txt,如果output.txt已经存在,它的内容会被覆盖;则会把标准输出添加到文件output.txt的尾部。如果你想把标准错误输出也重定向到文件,可以使用2>和2>>操作符。例如,会把command的标准错误输出写入文件。_linux默认日志/var/log,如何重定向到其他地方
文章浏览阅读2.2k次,点赞66次,收藏34次。我们在使用maven时,在pom.xml文件里面有个repositories的配置,这个配置可以来指定我们的依赖包下载的地址,我们常用的比如有阿里云镜像、华为云镜像地址等。这些地址能给我们提供更好的网络访问,但是当有时我们也需要自己的镜像库,比如我们自己开发的一个工具库只提供给公司内部使用,而又不想共享到公网上去,那这时就需要我们自己搭建一套maven的私有库。或者我们的开发环境下是不能上外网,只能链接公司的内网,这种情况也就需要我们的私有库。今天给大家分享如何大家自己的maven私有库。_sonatype nexus repository 操作说明
文章浏览阅读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年,最近钉钉迎来了一波更新,经过我的研究,总算研究出来了一个方法,并且做成了工具首先,让我们了解一下钉钉直播回放的下载方法。钉钉直播回放工具链接:https://pan.baidu.com/s/1oPWJOp8L2SBDlklt_t5WQQ?pwd=1234提取码:1234--来自百度网盘超级会员V10的分享1.解压好我给大家准备好的压缩包。
文章浏览阅读295次。C/C++ codeint DeviceManager::getAudioInputVolumn( const std::string &deviceName ){MMRESULT rc; // 多媒体函数返回结果变量HMIXER hMixer; // 混合器设备句柄MIXERLINE mxl; // 音频线路标准状态信..._c++获取麦克风输入音量