Update resources-actions.md

This commit is contained in:
Zhou 2022-11-06 12:23:00 +08:00 committed by GitHub
parent a901de81c2
commit 4904735597
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -10,11 +10,11 @@
### 数据表自动映射为资源 ### 数据表自动映射为资源
目前的资源主要针对数据表中的数据NocoBase 在默认情况下都会将数据库中的数据表自动映射为资源,同时也提供了服务端的数据接口。所以在默认情况下,只要使用了 `db.collection()` 定义了数据表,就可以通过 NocoBase 的 HTTP API 访问到这个数据表的数据资源了。自动生成的资源的名称与数据表定义的表名相同,比如 `db.collection({ name: 'users' })` 定义的数据表,对应的资源名称就是 `users` 目前的资源主要针对数据表中的数据NocoBase 在默认情况下都会将数据库中的数据表自动映射为资源,同时也提供了服务端的数据接口。所以在默认情况下,只要使用了 `db.collection()` 定义了数据表,就可以通过 NocoBase 的 HTTP API 访问到这个数据表的数据资源了。自动生成的资源的名称与数据表定义的表名相同,比如 `db.collection({ name: 'users' })` 定义的数据表,对应的资源名称就是 `users`
同时,还为这些数据资源内置了常用的 CRUD 操作,对关系型数据资源也内置了关联数据从操作方法。 同时,还为这些数据资源内置了常用的 CRUD 操作,关系型数据资源也内置了关联数据的操作方法。
简单数据资源的默认操作: 简单数据资源的默认操作:
* [`list`](/api/actions#list):查询数据表中的数据列表 * [`list`](/api/actions#list):查询数据表中的数据列表
* [`get`](/api/actions#get):查询数据表中的单条数据 * [`get`](/api/actions#get):查询数据表中的单条数据
@ -22,14 +22,14 @@
* [`update`](/api/actions#update):对数据表更新单条数据 * [`update`](/api/actions#update):对数据表更新单条数据
* [`destroy`](/api/actions#destroy):对数据表删除单条数据 * [`destroy`](/api/actions#destroy):对数据表删除单条数据
关系资源除了简单的 CRUD 操作,还有默认的关系操作: 关系资源除了简单的 CRUD 操作,还有默认的关系操作:
* [`add`](/api/actions#add):对数据添加关联 * [`add`](/api/actions#add):对数据添加关联
* [`remove`](/api/actions#remove):对数据移除关联 * [`remove`](/api/actions#remove):对数据移除关联
* [`set`](/api/actions#set):对数据设置关联 * [`set`](/api/actions#set):对数据设置关联
* [`toggle`](/api/actions#toggle):对数据添加或移除关联 * [`toggle`](/api/actions#toggle):对数据添加或移除关联
比如定义一个文章数据表并同步到数据: 比如定义一个文章数据表并同步到数据
```ts ```ts
app.db.collection({ app.db.collection({
@ -57,9 +57,9 @@ curl -X DELETE http://localhost:13000/api/posts:destroy?filterByTk=1
### 自定义 Action ### 自定义 Action
当默认提供的 CRUD 等操作不满足业务场景的情况下,也可以对特定资源扩展更多的操作。比如是对内置操作额外处理需求,或者需要设置默认参数的情况 当默认提供的 CRUD 等操作不满足业务场景的情况下,也可以对特定资源扩展更多的操作。比如是对内置操作额外处理,或者需要设置默认参数。
针对特定资源的自定义操作,如覆盖定义文章表的创建操作: 针对特定资源的自定义操作,如覆盖文章表`创建`操作:
```ts ```ts
// 等同于 app.resourcer.registerActions() // 等同于 app.resourcer.registerActions()
@ -82,7 +82,7 @@ app.actions({
这样在业务中就增加了合理的限制,用户不能以其他用户身份创建文章。 这样在业务中就增加了合理的限制,用户不能以其他用户身份创建文章。
针对全局所有资源的自定义操作,如对所有数据表都增加导出的操作: 针对全局所有资源的自定义操作,如对所有数据表都增加`导出`的操作:
```ts ```ts
app.actions({ app.actions({
@ -104,7 +104,7 @@ app.actions({
}); });
``` ```
则可以按以下 HTTP API 的方式进行 CSV 格式的数据导出 然后可以按以下 HTTP API 的方式导出 CSV 格式的数据
```bash ```bash
curl http://localhost:13000/api/<any_table>:export curl http://localhost:13000/api/<any_table>:export
@ -190,12 +190,13 @@ curl -X POST -d '{"title": "Hello", "to": "hello@nocobase.com"}' 'http://localho
## 示例 ## 示例
我们继续之前 [数据表与字段示例](/development/guide/collections-fields#示例) 中的简单店铺场景,进一步理解资源与操作相关的概念。这里假设我们的在基于之前数据表的示例进行进一步资源和操作的定义,所以这里不再重复定义数据表的内容。 我们继续之前 [数据表与字段示例](/development/server/collections-fields#示例) 中的简单店铺场景,进一步理解资源与操作相关的概念。这里假设我们基于之前数据表的示例进行进一步资源和操作的定义,所以这里不再重复定义数据表的内容。
只要定义了对应的数据表,我们对商品、订单等数据资源就可以直接使用默认操作以完成最基础的 CRUD 场景。
另外,只要定义了对应的数据表,我们对商品、订单等数据资源就可以直接使用这些默认操作以完成最场景的 CRUD 场景。
### 覆盖默认操作 ### 覆盖默认操作
某些情况下,不只是简单的针对单条数据的操作时,或者默认操作的参数需要有一定控制时,我们也可以覆盖默认的操作行为。比如我们创建订单时,不应该由客户端提交 `userId` 来代表订单的归属,而是应该由服务端根据当前登录用户来确定订单归属,这时我们就可以覆盖默认的 `create` 操作。对于简单的扩展,我们直接在插件的主类中编写: 有时候,不只是简单的针对单条数据的操作,或者默认操作的参数需要有一定控制,我们就可以覆盖默认的操作。比如我们创建订单时,不应该由客户端提交 `userId` 来代表订单的归属,而是应该由服务端根据当前登录用户来确定订单归属,这时我们就可以覆盖默认的 `create` 操作。对于简单的扩展,我们直接在插件的主类中编写:
```ts ```ts
import { Plugin } from '@nocobase/server'; import { Plugin } from '@nocobase/server';
@ -329,7 +330,7 @@ curl \
### 参数合并 ### 参数合并
假设我们要提供用户查询自己的且只能查询自己的订单,同时我们需要限制用户不能查询已取消的订单,那么我们可以通过 action 的默认参数来定义: 假设我们要让用户可以查询自己的且只能查询自己的订单,同时我们需要限制用户不能查询已取消的订单,那么我们可以通过 action 的默认参数来定义:
```ts ```ts
import { Plugin } from '@nocobase/server'; import { Plugin } from '@nocobase/server';
@ -340,7 +341,7 @@ export default class ShopPlugin extends Plugin {
this.app.resource({ this.app.resource({
name: 'orders', name: 'orders',
actions: { actions: {
// list 操作的默认参数 // list 操作的默认参数
list: { list: {
filter: { filter: {
// 由 users 插件扩展的过滤器运算符 // 由 users 插件扩展的过滤器运算符
@ -383,7 +384,7 @@ curl 'http://localhost:13000/api/orders:list?productId=1&fields=id,status,quanti
并得到预期的查询结果。 并得到预期的查询结果。
另外,如果我们需要对创建订单的接口限制不能由客户端提交订单编号(`id`)、总价(`totalPrice`)等字段,可以通过对 `create` 操作定义默认参数控制: 另外,如果我们需要对创建订单的接口限制不能由客户端提交订单编号(`id`)、总价(`totalPrice`)等字段,可以通过对 `create` 操作定义默认参数控制:
```ts ```ts
import { Plugin } from '@nocobase/server'; import { Plugin } from '@nocobase/server';