Nocobase快速上手 - 开发第一个插件

在前面的几篇博文中,记录了在Nocobase中配置collection和界面,这篇文章开始插件的开发。插件可以扩展Nocobase的业务能力,解锁更强大的功能。

环境搭建

创建插件需要配置nocobase的开发环境,笔者采用的是clone 官方代码repo的方式。

git clone https://github.com/nocobase/nocobase.git

代码clone到本地后,进入代码目录,安装依赖.
要注意项目要求的node版本是v18+,并且需要Yarn 1.22.x

推荐使用nvm来管理node版本随时切换,很多前端项目都有对node版本的要求

nvm

nvm安装非常简单,仅仅需要一个命令即可

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

然后就可以用nvm安装最新版本的node

nvm install 22

nocobase

在nocobase目录下安装依赖前,最好先配置yarn mirror,否则很可能因为网络问题造成失败

yarn config set registry https://registry.npmmirror.com/
yarn config set sqlite3_binary_host_mirror https://npmmirror.com/mirrors/sqlite3/

安装依赖

yarn install --fronzen-lockfile

依赖安装后,需要初始化一下应用

yarn nocobase install

然后启动应用

yarn dev

如果没有报错信息正常启动,并且在http://localhost:13000地址上能访问,那么开发环境就搭建成功了。

创建插件

创建插件使用yarn pm命令,pm是Nocobase的插件管理器。

yarn pm create @my-project/plugin-hello

创建完成后,可以在界面上看到创建的后的插件,如果没有显示,可以尝试用如下命令进行一次add操作:

yarn pm add @my-project/plugin-hello

可以在界面上看到新添加的插件
Nocobase plugin

第一行插件代码

新增的插件还没有任何功能,我们根据官方文档来编写第一行插件代码.

首先是新建. /src/server/collections/hello.ts文件

import { defineCollection } '@nocobase/database';

export default defineCollection({
  name: 'hello',
  fields: [{ type: 'string', name: 'name' }],
});

然后修改. /src/server/plugin.ts文件

import { Plugin } from '@nocobase/server';

export class PluginHelloServer extends Plugin {
  async afterAdd() {}

  async beforeLoad() {}

  async load() {
    // This is just an example. Expose all actions of the hello collection to the public
    this.app.acl.allow('hello', '*', 'public');
  }

  async install() {}

  async afterEnable() {}

  async afterDisable() {}

  async remove() {}
}

export default PluginHelloServer;

这两个文件分别定义了插件所使用的collection和这个collection的使用权限.
修改文件后,需要对插件进行激活来进行测试。

yarn pm enable @my-project/plugin-hello

测试插件

插件创建成功后,我们用curl进行简单的测试确认其可以正常工作

curl --location --request POST 'http://localhost:13000/api/hello:create' \
--header 'Content-Type: application/json' \
--data-raw '{
    "name": "Hello world"
}'

这段命令是向插件中定义的hello collection中插入数据。数据新增成功后,查询验证:

curl --location --request GET 'http://localhost:13000/api/hello:list'

小结

本文记录了Nocobase开发插件的简单步骤,通过新建插件,修改代码,初步熟悉插件开发的过程。虽然这个插件还没有什么具体的业务功能,但不失为一个好的开端。
更多功能正在探索中,欢迎交流。

### NocoBase 中计时功能的实现 NocoBase 是一个基于低代码理念开发的应用构建平台,其核心设计理念是通过模块化的方式提供灵活的功能扩展能力。虽然官方文档并未直接提及类似于 Vue 或 C++ 的具体计时功能实现细节[^1],但可以通过分析 NocoBase 的架构特点以及 JavaScript/Node.js 生态中的常见实践来推测其实现方式。 #### 使用 `setInterval` 和 `setTimeout` 实现简单的计时逻辑 在前端部分,可以借鉴 Vue 的倒计时实现思路,在组件内部定义状态变量并配合定时器完成计时操作。例如: ```javascript export default { data() { return { countdown: 60, // 初始倒计时时间 isCounting: false, }; }, methods: { startTimer() { this.isCounting = true; const timer = setInterval(() => { if (this.countdown > 0) { this.countdown -= 1; } else { clearInterval(timer); this.isCounting = false; } }, 1000); }, }, }; ``` 上述代码展示了如何利用 `setInterval` 创建每秒触发一次的回调函数,并动态更新界面显示的内容。 #### 后端服务中的高性能计时方案 对于更复杂的场景,比如后台任务调度或者长时间运行的任务监控,则可能需要用到 Node.js 提供的强大工具链。例如借助于 `node-cron` 库来进行周期性的作业安排;又或者是采用 Redis 这样的内存数据库存储临时数据结构以便快速访问和修改。 以下是使用 `node-cron` 定义每日凌晨两点执行某项工作的例子: ```javascript const cron = require('node-cron'); cron.schedule('0 2 * * *', () => { console.log('Running a job at 2 AM every day...'); }); ``` 此片段说明了即使是在服务器层面也可以轻松设置精确到分钟级别的自动化流程控制机制[^2]。 #### 结合 NocoBase 插件体系自定义业务逻辑 由于 NocoBase 支持插件扩展模型,因此开发者完全可以依据项目需求编写专属插件以满足特定领域内的复杂要求。假设我们需要记录用户行为轨迹并且统计在线时长等情况的话,就可以考虑设计这样一个专门负责此类事务处理的小型应用插件。 综上所述,尽管目前尚无针对 NocoBase 平台下原生支持的标准计时接口描述文件存在,但是凭借现代 Web 技术栈丰富的资源储备再加上该框架本身所具备的高度灵活性特性,足以应对大多数实际应用场景下的挑战。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TurboAI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值