接口(Resource)
120031. 在数据库resource表配置
2. 配置部分的说明
在Jianghu框架中接口可以直接手动通过项目数据库的_resource
表进行配置:
字段 | 说明 |
---|---|
accessControlTable | 数据规则控制表 |
resourceHook | 协议的前置和后置操作方法'](#hook) |
pageId | 接口的一级名称 |
actionId | 接口的二级名称,结合一级名称可以快速定位接口 |
desc | 协议的描述说明 |
resourceType | 协议类型; sql: 处理简单的crud 操作; service:手动创建相关service处理复杂的逻辑; |
appDataSchema | appData 参数数据结构的校验 |
resourceData | 协议的具体实现配置 |
requestDemo | Demo仅供开发者参考使用 |
responseDemo | Demo仅供开发者参考使用 |
operation | 操作; softInsert softUpdate softDelete select |
3. resourceHook
执行_ resource 表 resourceData 里面的操作前或后前置和后置service
方法,能够在数据库操作之前或之后执行Service。
3.1 参考用例
{ "before": [{ "service": "service文件名", "serviceFunction": "service方法名" }], "after": [{ "service": "service文件名", "serviceFunction": "service方法名" }] }
before
:在sql
执行之前,框架中间件httpResourceHook.js
会读取并运行service
方法after
:在sql
执行之后,框架中间件httpResourceHook.js
会读取并运行service
方法
3.2 实现逻辑
if (beforeHooks) {
for (const beforeHook of beforeHooks) {
const { service, serviceFunction } = beforeHook;
checkServiceFunction(service, serviceFunction);
await ctx.service[service][serviceFunction](ctx.request.body.appData.actionData, ctx);
}
}
if (afterHooks) {
for (const afterHook of afterHooks) {
const { service, serviceFunction } = afterHook;
checkServiceFunction(service, serviceFunction);
await ctx.service[service][serviceFunction](ctx.request.body.appData.actionData, ctx);
}
}