Directus 无头CMS
Directus 是用于管理自定义 SQL数据库的开源无头CMS。
Directus 还有一个直观的管理应用程序,供非技术用户管理内容。
Directus 提供 RESTful 和 GraphQL API 来管理数据库中的数据。
我们可以使用我们选择的数据库,因为 Directus 支持 PostgreSQL、MySQL、SQLite、OracleDB、MariaDB 和 MS-SQL 数据库。
Directus 提供自托管的免费计划;还提供付费云计划。核心团队支持仅适用于云管理项目。
特点
验证 内容国际化 免费和开源 支持任何SQL数据库 零供应商锁定
应用场景
内容管理系统
传统内容管理系统,板块丰富,复杂混乱。内容会越来越多,当我们需要定制更多的东西时,内容管理者只需处理数据,使数据节藕。
这种模式称为无头CMS内容,可以让内容创建没有限制,可以通过api,sdk。创建内容多样,灵活的内容。
创建珍藏历数据内容
作为内容数据管理,统计分析
减少了内容多样性开发的成本
拥有GraphQL API功能,数据分析等
内容 理论可以全部解藕
内容方面,能减轻一部分工作量,内容的RESTful GraphQL API Directus可以做到。
重点是解藕,这也是一个亮点郭老师,比如我们财务想要快速创建一个他们用的内部资料系统,文章系统,或者产品的文档系统,只有不涉及上传复杂(如加密文件)的cms场景,它确实也值得一用。
我们的service,做核心的功能,cms单独抽离出来,对程序来说,是一件减肥的变化
** 举一个简单的案例 **
通常拿一个内容需求来说,比如我们要创建内容和分类表
需要后端建立数据模型和开发 标准REASTFULAPI。
//引入mongoose建模工具模块
var mongoose=require('mongoose');
var Schema = mongoose.Schema
var ObjectId = Schema.Types.ObjectId
//声明一个MovieSchema调用mongoose的Schema方法传入对象
var ArticleSchema=new mongoose.Schema({
//标题
title: {
type: String,
default: ''
},
//内容
content: String,
//分类
categoryid: {
type: ObjectId,
ref: 'category'
},
pv: {
type: Number,
default: 0//默认值创建的时间
},
display: {
type: String,
default: '0'
},
meta: {//录入数据或更新时,时间记录
createAt: {//创建时间
type: Date,//日期类型
default: Date.now()//默认值创建的时间
},
updataAt: {//更新时间
type: Date,//日期类型
default: Date.now()//默认值创建的时间
}
}
});
//为模式添加一个方法 中间件
//每次添加数据之前都会来调用这个方法
ArticleSchema.pre('save',function(next){
//判断数据是否是新加的
if(this.isNew){
this.meta.createAt=this.meta.updataAt=Date.now();
}else{
this.meta.updataAt=Date.now();
}
next();
});
// movieSchema 模式的静态方法
ArticleSchema.statics={
fetch:function(cb){
return this
.find({})
.sort('meta.updataAt')
.exec(cb)
},
findByid:function(id,cb){
return this
.findOne({_id:id})
.exec(cb)
}
}
// 导出movieSchema模式
module.exports=ArticleSchema;
//引入mongoose建模工具模块
var mongoose=require('mongoose');
var Schema = mongoose.Schema
var ObjectId = Schema.Types.ObjectId
//声明一个MovieSchema调用mongoose的Schema方法传入对象
var ArticleSchema=new mongoose.Schema({
//标题
title: {
type: String,
default: ''
},
//内容
content: String,
//分类
categoryid: {
type: ObjectId,
ref: 'category'
},
pv: {
type: Number,
default: 0//默认值创建的时间
},
display: {
type: String,
default: '0'
},
meta: {//录入数据或更新时,时间记录
createAt: {//创建时间
type: Date,//日期类型
default: Date.now()//默认值创建的时间
},
updataAt: {//更新时间
type: Date,//日期类型
default: Date.now()//默认值创建的时间
}
}
});
//为模式添加一个方法 中间件
//每次添加数据之前都会来调用这个方法
ArticleSchema.pre('save',function(next){
//判断数据是否是新加的
if(this.isNew){
this.meta.createAt=this.meta.updataAt=Date.now();
}else{
this.meta.updataAt=Date.now();
}
next();
});
// movieSchema 模式的静态方法
ArticleSchema.statics={
fetch:function(cb){
return this
.find({})
.sort('meta.updataAt')
.exec(cb)
},
findByid:function(id,cb){
return this
.findOne({_id:id})
.exec(cb)
}
}
// 导出movieSchema模式
module.exports=ArticleSchema;
面对简单或者复杂关系表Directus都能很好的实现
{
data: [
{
id: 1,
status: "published",
sort: null,
user_created: "d69d7f09-ab97-4653-b4bb-97ac1872fb9d",
date_created: "2022-04-01T21:57:52.000Z",
user_updated: "d69d7f09-ab97-4653-b4bb-97ac1872fb9d",
date_updated: "2022-04-02T02:10:47.000Z",
name: "node",
articles: 2
},
{
id: 2,
status: "published",
sort: null,
user_created: "d69d7f09-ab97-4653-b4bb-97ac1872fb9d",
date_created: "2022-04-01T22:00:51.000Z",
user_updated: "d69d7f09-ab97-4653-b4bb-97ac1872fb9d",
date_updated: "2022-04-02T02:10:56.000Z",
name: "ts",
articles: 1
}]
}
简介及使用教程
Directus是一个开源软件套件,为SQL数据库提供即时API包装,并为非技术用户提供直观的管理应用程序来管理该内容。它就像一个安全,友好,超级动力的“数据库客户端”
数据自定义 可视化
Directus遵循数据库第一种方法,存储所有数据的不变与纯SQL数据库,可以完全定制。
访问和优化
Directus镜像您的实际数据库,因此它将自动与直接对数据库所做的任何更改保持同步!在SQL解锁的全部功能下,您可以:
使用有意义的表和列名来构建您的实际数据库 使用索引,数据类型,长度,默认值,密钥,编码等进行无限优化 随时更新您的数据库架构,Directus将立即反映更改 直接从数据库创建,更新和删除内容
(其他程序 直接)访问
这种数据库优先方法意味着您可以选择在需要时完全绕过Directus。将您的应用程序直接连接到数据库意味着Directus被完全绕过,甚至可以消除最轻微的瓶颈,并为您提供复杂SQL查询的无限功能。
简单,模块化和可扩展
我们有意保持我们的代码库尽可能简单轻便。Directus的每个方面都已模块化,有许多选项可用于扩展,覆盖甚至绕过核心系统。选择您的身份验证提供程序,存储适配器,内容接口,数据表示等。我们还有webhooks,事件挂钩,API响应过滤器,自定义端点,CSS / JS覆盖文件等等。
此外,由于代码库已在内部解耦,因此Directus支持完全多租户。您可以使用单个Directus App来管理多个Directus API实例,每个API实例可以管理多个数据库(项目或环境)。
参考文献
https://docs.directus.io/reference/introduction/
https://www.youtube.com/watch?v=AicEmIeuuLw