提交 c0b88ad0 编写于 作者: fxy060608's avatar fxy060608

Merge branch 'master' of https://github.com/dcloudio/uni-app

#### 3.0.7.20210109-alpha
+ App平台 修复 windows 系统部分情况下,查找 Chrome 失败,导致无法正常 debug 的Bug
+ App平台 修复 包含微信小程序组件时,部分情况下首次编译触发热刷新的Bug
+ App-Android平台 修复 nvue list 组件调用 setSpecialEffects 设置吸顶后,input 子组件无法获取焦点的Bug [详情](https://ask.dcloud.net.cn/question/114511)
+ App-Android平台 修复 nvue list/waterfall 组件使用 refresh 并设置 background-color 属性后会出现白边的Bug [详情](https://ask.dcloud.net.cn/question/105800)
+ App-iOS平台 修复 nvue refresh 组件处于刷新状态时显示位置向下偏移0.5像素的Bug
+ 快应用 修复 华为快应用IDE V3.0.2无法识别项目类型的Bug
* 【uniCloud】
+ DB Schema 新增 支持对 string 类型数据配置 trim ,可自动对字符串去除前后空白字符 [详情](https://uniapp.dcloud.net.cn/uniCloud/schema?id=trim)
+ DB Schema 修复 部分情况下使用 enum 报错的Bug
+ DB Schema 修复 exclusiveMinimum、exclusiveMaximum 无效的bug
+ clientDB 修复 查询树形结构时使用 startWith 某些写法导致报错的Bug
+ clientDB 修复 field 内使用JQL联表查询语法时多个右花括号连续出现导致报错的Bug
+ clientDB 修复 field 中包含`-`时报错的Bug
+ uniCloud本地调试插件 修复 部分日志导致本地调试服务崩溃的Bug
+ unicloud-db组件 支持tree查询,新增属性 gettree、startwith、limitlevel [详情](https://uniapp.dcloud.net.cn/uniCloud/unicloud-db?id=props)
* 【App插件(含5+App和uni-app的App端)】
+ 一键登录 优化 错误回调返回数据格式,添加 appid、metadata、uid 属性,便于排查错误 [规范](https://www.html5plus.org/doc/zh_cn/oauth.html#plus.oauth.ErrorCallback)
+ Android平台 更新 uni-AD 快手联盟SDK为3.3.6版,腾讯优量汇SDK为4.310.1180版,今日头条穿山甲SDK为3.4.1.0版
+ Android平台 更新 腾讯X5内核版本为 v4.3.0.67_43967 [详情](https://ask.dcloud.net.cn/article/36806)
+ Android平台 更新 UniPush 华为厂商推送 SDK 版本为 v4:2.0.0,适配 HMS4.0+ [详情](https://ask.dcloud.net.cn/article/35622#huawei)
+ Android平台 调整 应用主 Activity 为 FragmentActivity [详情](https://nativesupport.dcloud.net.cn/NativePlugin/course/android?id=%e6%b3%a8%e6%84%8f)
+ Android平台 修复 native.js 调用 requestPermissions 请求的权限已被允许可能引起其它功能无法正常申请系统权限的Bug [详情](https://ask.dcloud.net.cn/question/114645)
+ Android平台 修复 云端打包 更新 com.android.tools.build:gradle 版本后可能引起安装包文件变大、运行显示白屏的Bug [详情](https://ask.dcloud.net.cn/question/114496)
+ Android平台 修复 uploader 上传文件监听上传进度变化返回数据不准确的Bug [详情](https://ask.dcloud.net.cn/question/101035)
+ Android平台 修复 监听按键事件 keydown、keyup 不触发回调的Bug
+ Android平台 修复 video 封面图片 poster 拉伸变形显示的Bug [详情](https://ask.dcloud.net.cn/question/114952)
+ Android平台 修复 video 设置显示默认播放控件 controls 属性为 false 时手势操作失效的Bug
+ Android平台 修复 previewImage 预览图片可能显示模糊的Bug [详情](https://ask.dcloud.net.cn/question/113520)
+ Android平台 修复 2.9.9版本引出的 native.js 获取到原生对象可能无法执行器内部函数的Bug [详情](https://ask.dcloud.net.cn/article/38648)
+ iOS平台 修复 previewImage 预览网络图片地址中包含query参数过多可能无法显示的Bug [详情](https://ask.dcloud.net.cn/question/98259)
+ iOS平台 修复 audio 音频资源地址中包含中文字符时无法正常播放的Bug [详情](https://ask.dcloud.net.cn/question/103421)
+ iOS平台 修复 video 动态更新 src 属性值域名相同时无法正常切换视频的Bug [详情](https://ask.dcloud.net.cn/question/110386)
+ iOS平台 修复 video 视频资源地址中包含中文字符时无法正常播放的Bug
+ iOS平台 修复 titleNView 标题文字在隐藏软键盘时可能出现抖动的Bug
#### 3.0.4.20201230-alpha
* 【uniCloud】
+ uniCloud本地调试插件 修复 调试时较早请求云函数且无法连接本地调试服务时报错的Bug
......
......@@ -222,8 +222,8 @@ let res = await collection.doc('doc-id').set({
支持 `where()``limit()``skip()``orderBy()``get()``field()``count()` 等操作。
只有当调用`get()`时才会真正发送查询请求。
注:默认取前100条数据,最大取前100条数据。
limit不设置的情况下默认返回100条数据;设置limit有最大值,腾讯云限制为最大1000条,阿里云限制为最大500条。
**get响应参数**
......
......@@ -53,7 +53,8 @@ db.collection('list')
.then((res)=>{
// res 为数据库查询结果
}).catch((err)=>{
console.log(err.code); // 打印错误码
console.log(err.message); // 打印错误内容
})
```
......@@ -66,9 +67,9 @@ db.collection('list')
- 更新数据库时不可使用更新操作符`db.command.inc`
- 更新数据时键值不可使用`{'a.b.c': 1}`的形式,需要写成`{a:{b:{c:1}}}`形式(后续会对此进行优化)
### 返回值说明@returnvalue
### err返回值说明@returnvalue
`clientDB`云端默认返回值形式如下,开发者可以在[action](uniCloud/database?id=action)`after`内用js修改返回结果,传入`after`内的result不带code和message。
`clientDB`如果云端返回错误,err的返回值形式如下,
```js
{
......@@ -78,7 +79,7 @@ db.collection('list')
}
```
**错误码列表**
**err.code错误码列表**
|错误码 |描述 |
|:-: |:-: |
......@@ -93,6 +94,9 @@ db.collection('list')
|DUPLICATE_KEY |索引冲突 |
|SYSTEM_ERROR |系统错误 |
如需自定义返回的err对象,可以在clientDB中挂一个[action云函数](uniCloud/database?id=action),在action云函数的`after`内用js修改返回结果,传入`after`内的result不带code和message。
### 前端环境变量@variable
`clientDB`目前内置了3个变量可以供客户端使用,客户端并非直接获得这三个变量的值,而是需要传递给云端,云数据库在数据入库时会把变量替换为实际值。
......@@ -1583,9 +1587,9 @@ db.collection('order')
.get()
```
在进行数据库操作之前,clientDB会使用permission内配置的规则对客户端操作进行一次预校验,如果预校验不通过还会通过数据库查询再进行一次校验
在进行数据库操作之前,clientDB会使用permission内配置的规则对客户端操作进行一次校验,如果本次校验不通过还会通过数据库查询再进行一次校验
例:
1
```js
// 数据库内news表有以下数据
......@@ -1624,6 +1628,57 @@ db.collection('news').doc('1').update({
此时客户端条件里面只有`doc._id == 1`,schema内又限制的`doc.user_id == auth.uid`,所以第一次预校验无法通过,会进行一次查库校验判断是否有权限进行操作。发现auth.uid确实和doc.user_id一致,上面的数据库操作允许执行。
例2:
```js
// 数据库内goods表有以下数据
{
_id: "1",
name: "n1",
status: 1
}
{
_id: "2",
name: "n2",
status: 2
}
{
_id: "3",
name: "n3",
status: 3
}
```
```js
// news表对应的schema内做如下配置
{
"bsonType": "object",
"permission": { // 表级权限
"read": "doc.status > 1",
},
"properties": {
"name": {
"bsonType": "string"
},
"status": {
"bsonType": "int"
}
}
}
```
```js
// 用户在客户端使用如下操作,可以通过第一次校验,不会触发查库校验
db.collection('goods').where('status > 1').get()
// 用户在客户端使用如下操作,无法通过第一次校验,会触发一次查库校验(原理大致是使用name == "n3" && status <= 1作为条件进行一次查询,如果有结果就认为没有权限访问,了解即可,无需深入)
db.collection('goods').where('name == "n3"').get()
// 用户在客户端使用如下操作,无法通过第一次校验,会触发一次查库校验,查库校验也会无法通过
db.collection('goods').where('name == "n1"').get()
```
## action@action
action的作用是在执行前端发起的数据库操作时,额外触发一段云函数逻辑。它是一个可选模块。action是运行于云函数内的,可以使用云函数内的所有接口。
......
......@@ -89,11 +89,27 @@ websocket的实时特性导致serverless化比较复杂,目前曲线方案有
资源回收策略方面,阿里云是15分钟内没有第二次访问的云函数,就会被回收。腾讯云是半小时。
两家云厂商仍然在优化这个问题。目前如果开发者在意这个问题,给开发者的建议是:
1. 使用clientDB可以减少遇到问题的概率
1. 使用clientDB可以减少遇到冷启动问题的概率
2. 非高频访问的云函数,合并到高频云函数中。有的开发者使用纯单页方式编写云函数,即在一个云函数中通过路由处理实现了整个应用的所有后台逻辑。参考[插件](https://ext.dcloud.net.cn/search?q=%E8%B7%AF%E7%94%B1&cat1=7&orderBy=UpdatedDate)
3. 非高频访问的云函数,可以通过定时任务持续运行它(注意腾讯云可以使用这个方式完全避开冷启动,而阿里云的定时任务最短周期大于资源回收周期)
4. 向service@dcloud.io发邮件,申请预留资源不销毁
### uniCloud访问速度感觉不如传统服务器?@slow
抛开冷启动,只看热启动,也有开发者反应unicloud的数据不如传统服务器。其实原因如下:
在一台单机上安装php或java,同时安装数据库,访问速度确实快。
但在使用云数据库时,即数据库是单独的服务器,和运行代码不在一台服务器上时,本身就会略微造成些延迟。
如果每个请求都要拦截,校验权限,尤其是要查库校验权限的话,访问速度又会进一步延迟。
clientDB就是这种情况,因为clientDB内部有权限校验系统,某些权限的验证还需要数据库查询。
所以虽然clientDB的速度慢一些,但实际上开发者在自己写了路由拦截和权限管理的框架后,速度也下降。
clientDB也仍然在优化,减少查库校验权限的频次,优化速度。
### 发布H5时还得自己找个服务器部署前端网页,可以不用自己再找服务器吗?
uniCloud支持[前端网页托管](https://uniapp.dcloud.io/uniCloud/hosting),并且免费!
......@@ -208,4 +224,4 @@ exports.main = async function(event){
### 使用腾讯云报未登录Cloudbase
腾讯云会在本地storage存储一些信息,请不要在应用使用过程中使用clearStorage等接口直接删除storage。
\ No newline at end of file
腾讯云会在本地storage存储一些信息,请不要在应用使用过程中使用clearStorage等接口直接删除storage。
......@@ -24,7 +24,7 @@
- **方式1,在web控制台编写schema**
1. 登录 [uniCloud控制台](https://unicloud.dcloud.net.cn),选中一个数据表
2. 点击表右侧页签 “表结构”,点击 “编辑” 按钮,在编辑区域编写 Schema,编写完毕后点保存按钮即可生效。
![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-uni-app-doc/e237cb60-ff2d-11ea-8a36-ebb87efcf8c0.png)
![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-uni-app-doc/037fc310-549f-11eb-b997-9918a5dda011.png)
**web控制台上编辑`DB Schema`保存后是实时生效的,请注意对现网商用项目的影响。**
......@@ -1032,7 +1032,8 @@ db.collection('street').where("shop_id=='123123 || shop_id=='456456'").get()
`schema2code`不是简单的一键crud生成接口,它直接生成了可运行的页面。
`schema2code`代码生成系统功能包括:
- 自动生成新增、修改表单的页面文件,分别是add.vue和edit.vue。如果是uniCloud admin,还包括list.vue。
- 自动生成前端页面,新增、修改、列表、详情页面文件,分别是add.vue、edit.vue、list.vue和detail.vue。
- 自动生成uniCloud admin页面,新增、修改、列表页面文件,分别是add.vue、edit.vue和list.vue。
- 自动生成前端表单校验规则
表单校验工作,在前端和后端都需要做。在过去,这造成重复投入。
......@@ -1046,7 +1047,7 @@ db.collection('street').where("shop_id=='123123 || shop_id=='456456'").get()
DCloud提供了`uni-forms`前端组件,该组件的表单校验规范完全符合`DB Schema`中的校验规则,实现云端统一。`uni-forms`组件地址:[https://ext.dcloud.net.cn/plugin?id=2773](https://ext.dcloud.net.cn/plugin?id=2773)
1. 在uniCloud web控制台,进入一个数据表的表结构schema界面,点击按钮 “导出页面
1. 在uniCloud web控制台,进入一个数据表的表结构schema界面,点击按钮 “schema2code
![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-uni-app-doc/ba87a6b0-1519-11eb-81ea-f115fe74321c.png)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册