TypeScript 语言基于 Node.js 国产开源轻量级无代码开发平台,一年狂赚 226万元

7341e2ef12b0426f20cd4a0420943928.jpeg

开源轻量级无代码开发平台

01

NocoBase 是什么?

b6ed9113aef6a733405dba13bdbbbe6f.png

NocoBase 是一个极易扩展的开源无代码开发平台,完全掌控,无限扩展,助力你的开发团队快速响应变化,显著降低成本。

你不必投入几年时间、数百万资金研发,花几分钟时间部署 NocoBase,马上拥有一个私有、可控、极易扩展的无代码开发平台。

4af5e79e07c5649986648a03c46c5d8d.png

3f362003fface12374a10932c210a8bc.png

业务系统项目开发的困扰

你的开发团队为自身或者客户交付各种业务系统,你们正在面临这样的严重困扰:

  • 业务需求频繁变化

  • 交付时间短暂紧迫

  • 开发流程迟钝漫长

  • 人员成本居高不下

你的团队已经意识到需要抛弃传统开发方式,引入无代码开发可能是很好的选择。但你们经过调研或尝试后,对无代码平台有诸多担忧。

NocoBase 就是为你的开发团队量身定制的基础设施!

9afcc12853dd0a3679c43d835eeb311b.gif

02

NocoBase 如何工作?

74b47f96d11064d52729bdf0abf2d485.png

NocoBase 采用微内核架构,各类功能以插件形式扩展。插件化的设计降低了模块之间的耦合度,提高了复用率。随着插件库的不断扩充,常见的场景只需要组合插件即可完成基础搭建。

微内核

NocoBase 的内核类似于一个开发框架,主要负责定义应用的生命周期,并规范各层的接口协议。NocoBase 的基本结构如下图所示:

309d0090af84affcf35cd01aea943a0b.png

以数据模型作为底层驱动,以基于区块的界面作为用户层表现,业务逻辑层则作为连接两者的桥梁,并承载各类业务规则,使得业务数据可以通过用户的操作循环流动起来。

在以下三个主要层次,NocoBase 都定义了标准的协议:

  • 数据模型:基于关系型数据库 ORM 的上层封装,标准化的数据建模描述方式。

  • HTTP 路由:基于资源和操作定义的 RESTful-like 的接口形式。

  • 客户端界面:基于 Formily 2.0 的 JSON Schema,用以描述自定义的页面和区块布局。

基于这些协议,也使得其他模块的开发更加规范和简单。

插件化

在应用运行的生命周期中,NocoBase 在各个环节都开放了可扩展的接口,包括数据模型中的字段类型、表类型、第三方数据源,业务逻辑层的中间件插入,界面的组件、区块等,整个应用生命周期的各个环节(启动、停止、插件加载),甚至很多插件也提供了二次扩展的接口。这些设计充分地为应用开发提供了各种扩展的可能,而且 NocoBase 所有内置的功能也通过这个设计组成:

76b9fdc446dcf834a2e9652e9a496a7f.png

可以通过插件在应用的任意生命周期中扩展所需要的功能,例如权限插件,包含了自定义的数据表、请求中间件的业务处理和前端管理的界面。通过这样的设计,NocoBase 不仅实现了丰富的无代码功能,当内置功能无法满足需求时,也可以支持自由的扩展。

03

NocoBase 功能特性

5f7ac25d2eb07bfdbfd3d2315de0eca3.png

“无代码”对于快速开发业务系统有很大的帮助,但不可能满足所有需求,NocoBase 的设计原则是:

80% 的需求通过无代码实现,20% 由扩展开发实现。

数据模型驱动,“数据结构”与“使用界面”分离

f123bc97e2467552ba1fec07ddfb0b46.png

相比于表单和表格驱动,数据模型驱动可以提供没有上限的开发能力。

  • 数据和 UI 解耦

  • 同一张表、同一条记录可以创建任意数量、任意形态的区块和操作

  • 支持主数据库、外部数据库、第三方 API 作为数据源

所见即所得,使用超简单

1ed0f27e8ab18e33dfa2446440b208c0.gif

NocoBase 可以开发复杂和有特色的业务系统,但它的使用却非常简单。

  • 一键切换使用模式和配置模式

  • 页面就是一块画布,在画布上摆放各种区块和操作,组合出合适的界面,就像 Notion

  • 界面配置模式为普通人设计,而不是为程序员设计

一切皆插件,为扩展开发而生

17b8f91038604ba61a726507ff8ab7ad.png

面对复杂多变的业务场景,靠堆砌无代码能力来试图穷尽所有需求是徒劳的。NocoBase 为扩展开发而生,自由扩展插件,满足各种需求。

  • 采用微内核架构,全部功能都是插件,就像 Wordpress

  • 插件即插即用

  • 无论是页面、区块、操作,还是 API、数据源,都可以开发新的插件来满足新的需求

开源,使用主流技术栈

535cef8cd22547101fbd4739c1eca78f.png

NocoBase 核心代码和基础插件全部开源,提供绝对的透明度和可控性。

  • 使用 TypeScript 编写

  • 使用 Node.js、React、Koa 等主流技术栈

  • 只定义标准接口,不定义私有 DSL

  • 极致简单轻量,单台低配服务器即可运行,单人即可扩展开发

日志和监控

NocoBase 不是黑盒子,提供翔实的日志和监控警告基础设施。

  • 日志插件提供接口请求日志和系统运行日志

  • 日志支持级别、滚动策略、大小、打印格式等丰富的配置

  • 一系列遥测插件集成了 OpenTelemetry、Prometheus 等设施,让开发者可以监控任何指标

与已有系统融合

557364cf15ea86ab84393310c8e29630.png

NocoBase 提供多种方式与第三方系统融合:

  • 将第三方的数据库作为数据源

  • 将其他系统的 API 作为数据源

  • 单点登录 (SSO),实现无缝身份验证

  • 与第三方系统互相嵌入,融为一体

  • 多个 NocoBase 应用之间实现多应用、父子应用

04

NocoBase 资源汇总

NocoBase 官网

https://cn.nocobase.com

开源项目地址

https://github.com/nocobase/nocobase

官方文档

http://docs-cn.nocobase.com/

66d1f38f88a551fdef312bd1b2b4b39d.jpeg

往期推荐

b509dcbbe8f3db3508613460195d29be.png

☞ 高德地图: 红绿灯倒计时大揭秘

☞ 高速“车牌付”会取代 ETC 吗?

☞ 国内七大 IoT 物联网平台对比

☞ 我为什么放弃中移物联OneNET平台

☞ 这苦逼的IoT物联网我竟坚持了十年

☞ 打工人上班摸鱼, AI 监控老板行踪

a6dd62aa87462418afe4cf4298ee62d5.png

cab5aec3a517e5d576873848753c6c63.png

418b9b9f0a35af548c9a4bc9e8cb74a8.gif

a63f3468fe3fc6c2609cd08a95308985.gif

903d79d311ceca1812db862e2a003d5b.gif

98e635e25850d6879274a16d0479c2c0.gif

  • 9
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 TypedArray 类型来模拟 Node.js 中的 Buffer 类型,TypedArray 是一个内置的类型数组,在 TypeScript 中可以直接使用。同时,需要使用一些浏览器特定的 API 来实现 TypedArray 与 Buffer 类型之间的互转。 以下是一个示例代码,展示如何使用 TypedArray 实现一个类似于 Node.js 中 Buffer 的类型: ```typescript class Buffer { private bytes: Uint8Array; constructor(sizeOrArray: number | Uint8Array) { if (typeof sizeOrArray === 'number') { this.bytes = new Uint8Array(sizeOrArray); } else { this.bytes = sizeOrArray; } } static from(value: string, encoding: string = 'utf-8'): Buffer { const encoder = new TextEncoder(); const bytes = encoder.encode(value); return new Buffer(bytes); } toString(encoding: string = 'utf-8'): string { const decoder = new TextDecoder(encoding); return decoder.decode(this.bytes); } static isBuffer(obj: any): obj is Buffer { return obj instanceof Buffer; } slice(start?: number, end?: number): Buffer { return new Buffer(this.bytes.subarray(start, end)); } // 其他方法... // 将 TypedArray 转换为 Buffer static fromTypedArray(typedArray: TypedArray): Buffer { return new Buffer(new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength)); } // 将 Buffer 转换为 TypedArray toTypedArray(): TypedArray { return new Uint8Array(this.bytes.buffer, this.bytes.byteOffset, this.bytes.byteLength); } } ``` 需要注意的是,由于不同浏览器对 TypedArray 的支持程度不同,一些 API 的实现和行为可能会有所不同,需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值