Directus 无头CMS

2022-03-29 nodejs 阅读 1557 次

Directus 是用于管理自定义 SQL数据库的开源无头CMS。

Directus 还有一个直观的管理应用程序,供非技术用户管理内容。

Directus 提供 RESTful 和 GraphQL API 来管理数据库中的数据。

我们可以使用我们选择的数据库,因为 Directus 支持 PostgreSQL、MySQL、SQLite、OracleDB、MariaDB 和 MS-SQL 数据库。

Directus 提供自托管的免费计划;还提供付费云计划。核心团队支持仅适用于云管理项目。

特点

验证 内容国际化 免费和开源 支持任何SQL数据库 零供应商锁定

应用场景

内容管理系统

传统内容管理系统,板块丰富,复杂混乱。内容会越来越多,当我们需要定制更多的东西时,内容管理者只需处理数据,使数据节藕。

这种模式称为无头CMS内容,可以让内容创建没有限制,可以通过api,sdk。创建内容多样,灵活的内容。

创建珍藏历数据内容

作为内容数据管理,统计分析

Directus 无头CMS-黄继鹏博客

减少了内容多样性开发的成本

拥有GraphQL API功能,数据分析等

内容 理论可以全部解藕

Directus 无头CMS-黄继鹏博客

内容方面,能减轻一部分工作量,内容的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都能很好的实现

Directus 无头CMS-黄继鹏博客

Directus 无头CMS-黄继鹏博客

Directus 无头CMS-黄继鹏博客

{
  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 无头CMS-黄继鹏博客

Directus 无头CMS-黄继鹏博客

访问和优化

Directus镜像您的实际数据库,因此它将自动与直接对数据库所做的任何更改保持同步!在SQL解锁的全部功能下,您可以:

使用有意义的表和列名来构建您的实际数据库 使用索引,数据类型,长度,默认值,密钥,编码等进行无限优化 随时更新您的数据库架构,Directus将立即反映更改 直接从数据库创建,更新和删除内容

Directus 无头CMS-黄继鹏博客

Directus 无头CMS-黄继鹏博客

(其他程序 直接)访问

Directus 无头CMS-黄继鹏博客

这种数据库优先方法意味着您可以选择在需要时完全绕过Directus。将您的应用程序直接连接到数据库意味着Directus被完全绕过,甚至可以消除最轻微的瓶颈,并为您提供复杂SQL查询的无限功能。

简单,模块化和可扩展

我们有意保持我们的代码库尽可能简单轻便。Directus的每个方面都已模块化,有许多选项可用于扩展,覆盖甚至绕过核心系统。选择您的身份验证提供程序,存储适配器,内容接口,数据表示等。我们还有webhooks,事件挂钩,API响应过滤器,自定义端点,CSS / JS覆盖文件等等。

此外,由于代码库已在内部解耦,因此Directus支持完全多租户。您可以使用单个Directus App来管理多个Directus API实例,每个API实例可以管理多个数据库(项目或环境)。

参考文献

https://docs.directus.io/reference/introduction/

https://madewith.cn/451

https://www.youtube.com/watch?v=AicEmIeuuLw

https://www.youtube.com/watch?v=AqBYC39Nu2c

https://www.bilibili.com/video/BV1hb41147if/

0条评论
...