提交 589203ad 编写于 作者: DCloud_Heavensoft's avatar DCloud_Heavensoft

Update jql-schema-ext.md

上级 1da221bb
......@@ -9,7 +9,9 @@ DB Schema 的json文件无法编程,可编程扩展的js将大大增强schema
- 在HBuilderX项目下,在目录 uniCloud/database/ 下可以创建`${表名}.schema.ext.js`
- 在uniCloud web控制台的数据库表管理界面,在schema.json旁边也有`${表名}.schema.ext.js`的在线管理。
schema扩展js在规划中可以实现很多事情,目前仅上线数据库触发器功能,推荐开发者使用JQL数据库触发器来替代action云函数。
schema扩展js在规划中可以实现很多事情,目前仅上线数据库触发器功能。
推荐开发者使用JQL数据库触发器来替代action云函数。
## 数据库触发器@trigger
......@@ -263,14 +265,14 @@ module.exports {
}
}
}
```
### 在触发器内使用jql语法@using-jql-in-schema
jql触发器内可以使用jql语法操作数据库。
我们现在增加一个阅读记录表,schema如下
```
### 在触发器内使用jql语法@using-jql-in-schema
jql触发器内可以使用jql语法操作数据库。
我们现在增加一个阅读记录表,schema如下
为了不增加示例的复杂度,所有权限均设置为true,实际项目中切勿随意模仿。
......@@ -290,44 +292,44 @@ jql触发器内可以使用jql语法操作数据库。
"bsonType": "string"
},
"article_id": {
"bsonType": "string",
"bsonType": "string",
"foreignKey": "article._id"
},
"reader_id": {
"bsonType": "string",
"foreignKey": "uni-id-users._id",
"forceDefaultValue": {
"$env": "uid"
"bsonType": "string",
"foreignKey": "uni-id-users._id",
"forceDefaultValue": {
"$env": "uid"
}
}
}
}
```
使用jql语法可以自动验证客户端身份,仍以上述article表为例,在afterRead触发器内插入阅读记录。此时会将读者id插入到reader_id字段
```
使用jql语法可以自动验证客户端身份,仍以上述article表为例,在afterRead触发器内插入阅读记录。此时会将读者id插入到reader_id字段
```js
module.exports = {
trigger: {
afterRead: async function ({
where,
where,
field,
clientInfo
} = {}) {
const id = where && where._id
if(typeof id !== 'string' || !field.includes('content')) {
return
} = {}) {
const id = where && where._id
if(typeof id !== 'string' || !field.includes('content')) {
return
}
const dbJQL = uniCloud.databaseForJQL({
clientInfo
})
await dbJQL.collection('article-view-log')
.add({
article_id: id,
reader_id: dbJQL.getCloudEnv('$cloudEnv_uid')
.add({
article_id: id,
reader_id: dbJQL.getCloudEnv('$cloudEnv_uid')
})
}
}
}
```
### 注意事项
......@@ -339,8 +341,9 @@ module.exports = {
- 通过jql的redis缓存读取的内容不会触发读触发器
- jql数据管理不会触发任何触发器
#### 和action的关系
数据库触发器能实现很多常见的action功能,并且无需修改schema和数据库指令。
#### 和action云函数的关系
触发器的before会在所有action的before执行之前再执行,after会在所有action的after执行之后再执行。action无法捕获触发器抛出的错误。
\ No newline at end of file
- 数据库触发器比action云函数更安全,不会被前端错误指定。
- 数据库触发器支持JQL语法。action云函数只支持使用传统MongoDB方式。
- 数据库触发器能实现很多常见的action云函数功能,并且无需修改schema和数据库指令。
- 如果同时使用数据库触发器和action云函数,注意触发器的before会在所有action的before执行之前再执行,after会在所有action的after执行之后再执行。action无法捕获触发器抛出的错误。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册