提交 bdb94e52 编写于 作者: W wanganxp

更新uni-id-summary链接、opendb链接、数据库入门教程及不少文档措辞完善

上级 a4da504b
...@@ -124,10 +124,10 @@ serverless不是传统云,它不需要开发者选择CPU和内存配置,也 ...@@ -124,10 +124,10 @@ serverless不是传统云,它不需要开发者选择CPU和内存配置,也
而有了uniCloud,这些门槛全都降了下去: 而有了uniCloud,这些门槛全都降了下去:
1. uniCloud采用js编写后端服务代码,无需单独学习php或java,甚至也无需提前掌握nodejs。看下uniCloud的api文档即可。 1. uniCloud采用js编写后端服务代码,无需单独学习php或java,甚至也无需提前掌握nodejs。看下uniCloud的api文档即可。
2. uniCloud基于serverless,开发者无需了解linux、nginx,无需熟悉负载均衡、大并发处理,不用关心系统补丁和DDoS攻击,只需要用js写好云端业务代码,上传到uniCloud即可。 2. uniCloud基于serverless,开发者无需了解linux、nginx,无需熟悉负载均衡、大并发处理,不用关心系统补丁和DDoS攻击,只需要用js写好云端业务代码,上传到uniCloud即可。
3. uniCloud推出了[opendb](https://gitee.com/dcloud/opendb),包含了大量的开源数据库模板,常见数据表无需自己设计。通过opendb模板,开发者可以快速掌握数据库设计。 3. uniCloud推出了[opendb](opendb.md),包含了大量的开源数据库模板,常见数据表无需自己设计。通过opendb模板,开发者可以快速掌握数据库设计。
4. SQL在过去也需要单独学习,尤其是复杂的联表查询、Tree查询,掌握很不容易。uniCloud推出了JQL(Javascript Query Language),会js即可掌握数据库查询,更对联表查询、Tree查询提供了非常简便的操作封装。 4. SQL在过去也需要单独学习,尤其是复杂的联表查询、Tree查询,掌握很不容易。uniCloud推出了JQL(Javascript Query Language),会js即可掌握数据库查询,更对联表查询、Tree查询提供了非常简便的操作封装。
5. uniCloud提供了[uni-id](https://uniapp.dcloud.net.cn/uniCloud/uni-id),无需自己开发账户体系,登录、注册、修改密码、角色权限体系、token管理一应俱全。 5. uniCloud提供了[uni-id](uni-id-summary.md),无需自己开发账户体系,登录、注册、修改密码、角色权限体系、token管理一应俱全。
6. uniCloud在[DB Schema](https://uniapp.dcloud.net.cn/uniCloud/schema)中提供了与[uni-id](https://uniapp.dcloud.net.cn/uniCloud/uni-id)的角色权限体系配套的数据权限控制方案。这套方案让初学者也不会在权限控制中犯错。 6. uniCloud在[DB Schema](schema.md)中提供了与[uni-id](uni-id-summary.md)的角色权限体系配套的数据权限控制方案。这套方案让初学者也不会在权限控制中犯错。
在一目了然的权限配置清单中可以轻松发现漏做的事情,比以往在大坨php代码中分析是否存在权限漏洞要简单的多。 在一目了然的权限配置清单中可以轻松发现漏做的事情,比以往在大坨php代码中分析是否存在权限漏洞要简单的多。
这套方案还能让多人协作、或项目二次开发变的更容易,因为规范的存在,新人可以轻易读懂老代码的权限体系逻辑。 这套方案还能让多人协作、或项目二次开发变的更容易,因为规范的存在,新人可以轻易读懂老代码的权限体系逻辑。
...@@ -165,8 +165,8 @@ uni云端一体生态的内容太多,让我们抽丝剥茧、归纳分类, ...@@ -165,8 +165,8 @@ uni云端一体生态的内容太多,让我们抽丝剥茧、归纳分类,
开发效率提升,分7个层次: 开发效率提升,分7个层次:
1. 提供众多现成轮子,不用自己写代码 1. 提供众多现成轮子,不用自己写代码
2. 如果没有现成轮子,那么用[schema2code](https://uniapp.dcloud.net.cn/uniCloud/schema?id=autocode)代码生成工具,生成数据库的增删改查页面(是直接生成页面,不是生成接口) 2. 如果没有现成轮子,那么用[schema2code](schema2code.md)代码生成工具,生成数据库的增删改查页面(是直接生成页面,不是生成接口)
3. 如果schema2code搞不定,需要手写代码,那么使用[clientDB](https://uniapp.dcloud.net.cn/uniCloud/clientdb),将节省80%的服务端开发工作 3. 如果schema2code搞不定,需要手写代码,那么使用[clientDB](clientdb.md),将节省80%的服务端开发工作
4. 如果仍然需要写云端代码,那么云对象让你的开发更简单 4. 如果仍然需要写云端代码,那么云对象让你的开发更简单
5. HBuilderX在云端协同中提供工具助力 5. HBuilderX在云端协同中提供工具助力
6. 端和云的语言统一,提高了沟通效率、招聘效率 6. 端和云的语言统一,提高了沟通效率、招聘效率
...@@ -189,14 +189,14 @@ uni云端一体生态的内容太多,让我们抽丝剥茧、归纳分类, ...@@ -189,14 +189,14 @@ uni云端一体生态的内容太多,让我们抽丝剥茧、归纳分类,
**1. 官方维护的插件** **1. 官方维护的插件**
- uni-id:不用再开发用户系统。用户注册、登录(含社交登录、短信验证码登录、App一键登录)、修改或重置密码、token管理、图形验证码、RBAC权限角色系统...所有与用户相关的,不管前端还是云端,代码都是现成的。[详见](/uniCloud/uni-id-summary) - uni-id:不用再开发用户系统。用户注册、登录(含社交登录、短信验证码登录、App一键登录)、修改或重置密码、token管理、图形验证码、RBAC权限角色系统...所有与用户相关的,不管前端还是云端,代码都是现成的。[详见](/uniCloud/uni-id-summary)
- uni-pay:不管微信还是支付宝,不管App、微信小程序、还是支付宝小程序,不管前端还是服务端,一切都现成的,拿来即用。[详见](/uniCloud/unipay) - uni-pay:不管微信还是支付宝,不管App、微信小程序、还是支付宝小程序,不管前端还是服务端,一切都现成的,拿来即用。[详见](unipay.md)
- uni-starter:云端一体应用快速开发基本项目模版,实现快速搭建一款应用。它集成了很多通用的功能,比如登录注册、头像、设置、拦截器、banner...[详见](https://ext.dcloud.net.cn/plugin?id=5057) - uni-starter:云端一体应用快速开发基本项目模版,实现快速搭建一款应用。它集成了很多通用的功能,比如登录注册、头像、设置、拦截器、banner...[详见](https://ext.dcloud.net.cn/plugin?id=5057)
- uni-admin:全端可用的admin后台。自带用户管理、权限管理、角色管理、菜单管理、业务图表统计。更有众多admin插件,比如cms插件、banner管理插件、App升级管理插件...[详见](/uniCloud/admin) - uni-admin:全端可用的admin后台。自带用户管理、权限管理、角色管理、菜单管理、业务图表统计。更有众多admin插件,比如cms插件、push、banner管理插件、App升级管理插件...[详见](admin.md)
- uni-search:云端一体搜索。搜索页面、输入联想、搜索历史记录、热搜词分析提取...一应俱全。[详见](https://ext.dcloud.net.cn/plugin?id=3851) - uni-search:云端一体搜索。搜索页面、输入联想、搜索历史记录、热搜词分析提取...一应俱全。[详见](https://ext.dcloud.net.cn/plugin?id=3851)
- uni-file-picker:前端直传uniCloud存储组件。[详见](https://ext.dcloud.net.cn/plugin?id=4079) - uni-file-picker:前端直传uniCloud存储组件。[详见](https://ext.dcloud.net.cn/plugin?id=4079)
- uni-captcha:云端一体图形验证码组件。[详见](https://ext.dcloud.net.cn/plugin?id=4048) - uni-captcha:云端一体图形验证码组件。[详见](https://ext.dcloud.net.cn/plugin?id=4048)
- uni-sec-check:免费的内容安全审查,防止用户提交违法的文字或图片。[详见](https://ext.dcloud.net.cn/plugin?id=5460) - uni-sec-check:免费的内容安全审查,防止用户提交违法的文字或图片。[详见](https://ext.dcloud.net.cn/plugin?id=5460)
- uni-upgrade-center:App升级中心。支持整包升级、wgt热更新;支持直接下载安装包或跳转应用商店。[详见](uniCloud/upgrade-center.md) - uni-upgrade-center:App升级中心。支持整包升级、wgt热更新;支持直接下载安装包或跳转应用商店。[详见](upgrade-center.md)
**2. 社区的优秀插件** **2. 社区的优秀插件**
...@@ -207,8 +207,6 @@ uni云端一体生态的内容太多,让我们抽丝剥茧、归纳分类, ...@@ -207,8 +207,6 @@ uni云端一体生态的内容太多,让我们抽丝剥茧、归纳分类,
- IM - IM
- 日志管理 - 日志管理
- 敏感词过滤 - 敏感词过滤
- push
- 图表统计
**3. 项目模板** **3. 项目模板**
...@@ -226,43 +224,43 @@ uni云端一体生态的内容太多,让我们抽丝剥茧、归纳分类, ...@@ -226,43 +224,43 @@ uni云端一体生态的内容太多,让我们抽丝剥茧、归纳分类,
在这里,我们还必须提到2个新概念:`uni_module``datacom` 在这里,我们还必须提到2个新概念:`uni_module``datacom`
- uni_module:云端一体组件最佳的承载方式。传统的npm无法处理云端一体的需求,把前端和云端的代码,一起打包到一个uni_module中,整体传播与发布,对云端一体组件的生态有重大的帮助。[详见](https://uniapp.dcloud.net.cn/uni_modules) - uni_module:云端一体组件最佳的承载方式。传统的npm无法处理云端一体的需求,把前端和云端的代码,一起打包到一个`uni_module`中,整体传播与发布,对云端一体组件的生态有重大的帮助。[详见](https://uniapp.dcloud.net.cn/uni_modules)
- datacom:datacom是一种在前端绑定后端数据源的组件。[详见](https://uniapp.dcloud.net.cn/component/datacom) - datacom:datacom是一种在前端绑定后端数据源的组件。[详见](https://uniapp.dcloud.net.cn/component/datacom)
优良的模块化方案让生态越发繁荣。 优良的模块化方案让生态越发繁荣。
#### 第二层提效:schema2code自动生成代码 #### 第二层提效:schema2code自动生成代码
如果在第一层提效中,找不到现成的轮子,需要自己写代码时。那么首先要做的,是使用[schema2code](https://uniapp.dcloud.net.cn/uniCloud/schema?id=autocode)这个神器,自动生成代码。 如果在第一层提效中,找不到现成的轮子,需要自己写代码时。那么首先要做的,是使用[schema2code](schema2code.md)这个神器,自动生成代码。
uniCloud云数据的schema,是一项重要的创新。 uniCloud云数据的schema,是一项重要的创新。
为数据表编写schema,可以实现非常多功能:数据结构定义、权限管理、数据值域管理,以及非常神奇的功能 -- 《[schema2code](https://uniapp.dcloud.net.cn/uniCloud/schema?id=autocode) 为数据表编写schema,可以实现非常多功能:数据结构定义、权限管理、数据值域管理,以及非常神奇的功能 -- 《[schema2code](schema2code.md)
在传统开发中,有了数据库,可以生成crud后台接口。然后前端再写代码调用接口。 在传统开发中,有了数据库,可以生成crud后台接口。然后前端再写代码调用接口。
但在uni云端一体生态中,有了数据库的schema,可以直接生成云端一体的页面。而不仅仅是只生成接口。 但在uni云端一体生态中,有了数据库的schema,可以直接生成云端一体的页面。而不仅仅是只生成接口。
[schema2code](https://uniapp.dcloud.net.cn/uniCloud/schema?id=autocode),可以生成手机端的列表、详情或增删改页面,也可以生成admin管理端的所有数据管理功能的页面。 [schema2code](schema2code.md),可以生成手机端的列表、详情或增删改页面,也可以生成admin管理端的所有数据管理功能的页面。
如下是[schema2code](https://uniapp.dcloud.net.cn/uniCloud/schema?id=autocode)的操作演示视频: 如下是[schema2code](schema2code.md)的操作演示视频:
<video style="width:50vw;height:28vw;" id="video" preload="none" controls="controls" <video style="width:50vw;height:28vw;" id="video" preload="none" controls="controls"
poster="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-b537e2ca-0f4e-4ff0-a097-48fdeafb9873/bfcc37f1-389f-40e9-a538-bf6d53ab0990.mp4?x-oss-process=video/snapshot,t_1000,f_jpg" src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-b537e2ca-0f4e-4ff0-a097-48fdeafb9873/bfcc37f1-389f-40e9-a538-bf6d53ab0990.mp4"></video> poster="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-b537e2ca-0f4e-4ff0-a097-48fdeafb9873/bfcc37f1-389f-40e9-a538-bf6d53ab0990.mp4?x-oss-process=video/snapshot,t_1000,f_jpg" src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-b537e2ca-0f4e-4ff0-a097-48fdeafb9873/bfcc37f1-389f-40e9-a538-bf6d53ab0990.mp4"></video>
可以实战体验这个[云端一体通讯录](https://ext.dcloud.net.cn/plugin?id=2574)的项目,几乎没有单独写代码。设计好通讯录的表schema,用[schema2code](https://uniapp.dcloud.net.cn/uniCloud/schema?id=autocode)即可生成这个项目。 可以实战体验这个[云端一体通讯录](https://ext.dcloud.net.cn/plugin?id=2574)的项目,几乎没有单独写代码。设计好通讯录的表schema,用[schema2code](schema2code.md)即可生成这个项目。
前述提到的返乡人员管理项目,之所以只花费了半小时就可以做好,也是[schema2code](https://uniapp.dcloud.net.cn/uniCloud/schema?id=autocode)的功劳。 前述提到的返乡人员管理项目,之所以只花费了半小时就可以做好,也是[schema2code](schema2code.md)的功劳。
数据的权限管理也很简单,在schema中可以快速定义指定的数据记录或字段,只能由什么样角色或权限的人来操作。 数据的权限管理也很简单,在schema中可以快速定义指定的数据记录或字段,只能由什么样角色或权限的人来操作。
数据入库的值域校验就更简单了。传统开发中,一个手机号的校验,需要在前端页面写一遍,服务器入库前再检查一遍,很多余。既然云端协同了,自然会优化掉这个问题。 数据入库的值域校验就更简单了。传统开发中,一个手机号的校验,需要在前端页面写一遍,服务器入库前再检查一遍,很多余。既然云端协同了,自然会优化掉这个问题。
现在只需在DB Schema中定义好手机号这个字段的可选值域,比如一个正则,那么[schema2code](https://uniapp.dcloud.net.cn/uniCloud/schema?id=autocode)将自动生成前端表单,且遵循schema的定义,只接受相同正则。 现在只需在DB Schema中定义好手机号这个字段的可选值域,比如一个正则,那么[schema2code](schema2code.md)将自动生成前端表单,且遵循schema的定义,只接受相同正则。
这样不但提高了开发效率,还可以避免传统开发中各种漏洞,保持严谨和一致性。 这样不但提高了开发效率,还可以避免传统开发中各种漏洞,保持严谨和一致性。
[schema2code](https://uniapp.dcloud.net.cn/uniCloud/schema?id=autocode)生成的代码清晰易读,易于二次开发。这比低代码平台更有效率、且完全开放开源,随意扩展。 [schema2code](schema2code.md)生成的代码清晰易读,易于二次开发。这比低代码平台更有效率、且完全开放开源,随意扩展。
#### 第三层提效:clientDB,让服务器代码减少80% #### 第三层提效:clientDB,让服务器代码减少80%
...@@ -289,10 +287,10 @@ uni-app提供了`<unicloud-db>`组件(代码块触发键是udb),在前端 ...@@ -289,10 +287,10 @@ uni-app提供了`<unicloud-db>`组件(代码块触发键是udb),在前端
是的,仅需5行代码,就可以完成过去前后端合计得写几十行代码才能完成的事情,代码量大幅减少到原来的十分之一。 是的,仅需5行代码,就可以完成过去前后端合计得写几十行代码才能完成的事情,代码量大幅减少到原来的十分之一。
无需担心前端直接访问数据库会造成安全隐患,上一节提过了DB Schema,在云端的schema中可以定义什么角色可以操作数据库。[详见](https://uniapp.dcloud.net.cn/uniCloud/schema?id=permission) 无需担心前端直接访问数据库会造成安全隐患,上一节提过了DB Schema,在云端的schema中可以定义什么角色可以操作数据库。[详见](schema.md#permission)
clientDB技术,有前端的[JS API](https://uniapp.dcloud.net.cn/uniCloud/clientdb)[前端组件](https://uniapp.dcloud.net.cn/uniCloud/unicloud-db),为了进一步提高开发效率,clientDB还提供了几大利器: clientDB技术,有前端的[JS API](clientdb.md)[前端组件](unicloud-db.md),为了进一步提高开发效率,clientDB还提供了几大利器:
[JQL](https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=jsquery)是一种基于js的数据库操作语言,它改进了SQL语言的诸多不便之处。 [JQL](jql.md)是一种基于js的数据库操作语言,它改进了SQL语言的诸多不便之处。
- 在传统mysql或MongoDB中,联表查询的写法非常麻烦,tree查询mysql根本没有,需要oracle等专业数据库。但在uniCloud中,只需在数据库的schema中定义两个表的字段之间的关系,比如是引用关系(foreignKey)、还是父子关系(parentKey),前端就可以直接查询,轻松完成[联表查询](https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=lookup)[tree查询](https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=gettree) - 在传统mysql或MongoDB中,联表查询的写法非常麻烦,tree查询mysql根本没有,需要oracle等专业数据库。但在uniCloud中,只需在数据库的schema中定义两个表的字段之间的关系,比如是引用关系(foreignKey)、还是父子关系(parentKey),前端就可以直接查询,轻松完成[联表查询](https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=lookup)[tree查询](https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=gettree)
- SQL语言的运算方法非常少,而JQL则提供了大量的运算方法,比如日期运算dayOfMonth()、字符串操作方法substr()、数字运算方法add()...可以对数据库字段的值直接进行运算和筛选。比如对数据库2个字段进行加权求和然后排序,这传统的SQL语句可搞不定了 - SQL语言的运算方法非常少,而JQL则提供了大量的运算方法,比如日期运算dayOfMonth()、字符串操作方法substr()、数字运算方法add()...可以对数据库字段的值直接进行运算和筛选。比如对数据库2个字段进行加权求和然后排序,这传统的SQL语句可搞不定了
...@@ -300,9 +298,9 @@ clientDB技术,有前端的[JS API](https://uniapp.dcloud.net.cn/uniCloud/clie ...@@ -300,9 +298,9 @@ clientDB技术,有前端的[JS API](https://uniapp.dcloud.net.cn/uniCloud/clie
#### 第四层提效:云对象,改变前后端协同 #### 第四层提效:云对象,改变前后端协同
如果clientDB仍然不能满足需求,必须编写云端代码,那么[云对象](uniCloud/cloud-obj.md)的出现,彻底改变了后端开发json接口和前端联调的低效局面。 如果clientDB仍然不能满足需求,必须编写云端代码,那么[云对象](cloud-obj.md)的出现,彻底改变了后端开发json接口和前端联调的低效局面。
[云对象](uniCloud/cloud-obj.md)把云端的代码变成对象方式,让前端js直接import这个对象,然后使用这个对象的方法,就像使用前端的js对象一样顺畅。 [云对象](cloud-obj.md)把云端的代码变成对象方式,让前端js直接import这个对象,然后使用这个对象的方法,就像使用前端的js对象一样顺畅。
云端新加一个`todo`云对象,写一个add方法,代码如下: 云端新加一个`todo`云对象,写一个add方法,代码如下:
```js ```js
...@@ -381,5 +379,4 @@ js和其他服务器语言,比如php或java,在过去需要Mock来翻译, ...@@ -381,5 +379,4 @@ js和其他服务器语言,比如php或java,在过去需要Mock来翻译,
uniCloud是开发界的革命。在HBuilderX、uni-app、uniCloud三位一体的协同下、创新的功能设计下、丰富的生态和轮子支持下,开发者的开发效率,超过传统开发10倍以上。 uniCloud是开发界的革命。在HBuilderX、uni-app、uniCloud三位一体的协同下、创新的功能设计下、丰富的生态和轮子支持下,开发者的开发效率,超过传统开发10倍以上。
> 目前uniCloud已发展2年多,活跃服务空间数万,云函数日请求数量过亿。请放心使用。 > 目前uniCloud已发展2年多,活跃服务空间数万,云函数日请求数量过亿。请放心使用。
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
* [unicloud-db前端组件](uniCloud/unicloud-db.md) * [unicloud-db前端组件](uniCloud/unicloud-db.md)
* [云函数通过JQL操作数据库](uniCloud/jql-cloud.md) * [云函数通过JQL操作数据库](uniCloud/jql-cloud.md)
* [JQL调试器](uniCloud/jql-runner.md) * [JQL调试器](uniCloud/jql-runner.md)
* [schema2code自动生成代码](schema2code.md)
* [性能优化](uniCloud/db-performance.md) * [性能优化](uniCloud/db-performance.md)
* [缓存JQL查询到redis](uniCloud/jql-cache-redis.md) * [缓存JQL查询到redis](uniCloud/jql-cache-redis.md)
* [云函数通过传统方式操作数据库](uniCloud/cf-database.md) * [云函数通过传统方式操作数据库](uniCloud/cf-database.md)
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
在微信小程序云的开发中,自定义登录还可以用于前端操作数据库。 在微信小程序云的开发中,自定义登录还可以用于前端操作数据库。
但因为腾讯云提供的这套方案不够灵活和完善,uniCloud单独做了[uni-id](/uniCloud/uni-id)用于完善的账户体系,单独做了[clientDB](/uniCloud/clientdb),用于完善快捷的前端操作数据库。 但因为腾讯云提供的这套方案不够灵活和完善,uniCloud单独做了[uni-id](uni-id-summary.md)用于完善的账户体系,单独做了[clientDB](clientdb.md),用于完善快捷的前端操作数据库。
所以目前腾讯云的自定义登录功能,在uniCloud中的价值只剩下前端删除云存储。DCloud不建议开发者这么用,前端直传云存储不需要腾讯云自定义登录,而删除云存储,还是应该在云端进行。 所以目前腾讯云的自定义登录功能,在uniCloud中的价值只剩下前端删除云存储。DCloud不建议开发者这么用,前端直传云存储不需要腾讯云自定义登录,而删除云存储,还是应该在云端进行。
......
...@@ -139,15 +139,13 @@ async function sum () { //注意方法或生命周期需使用async异步方式 ...@@ -139,15 +139,13 @@ async function sum () { //注意方法或生命周期需使用async异步方式
} }
``` ```
由于篇幅较长,学习云对象需另见文档[云对象](/uniCloud/cloud-obj) 由于篇幅较长,学习云对象需另见文档[云对象](cloud-obj.md)
### 普通云函数callFunction方式 ### 普通云函数callFunction方式
- 普通云函数适用的情况: - 普通云函数适用的情况:
云函数是uniCloud的基础,它什么问题都可以解决,但在clientDB和云对象适用的场景中,使用普通云函数反而低效。 在HBuilderX 3.5.2之前,需要URL化和定时运行时,只能使用普通云函数;在HBuilderX 3.5.2+,云对象也支持了URL化和定时运行,此时推荐使用云对象替代云函数。
clientDB和云对象不能解决的包括:需要云函数URL化与非uni-app系统通信、云端定时运行云函数。
**直观体验代码示例** **直观体验代码示例**
...@@ -194,9 +192,9 @@ exports.main = async (event, context) => { ...@@ -194,9 +192,9 @@ exports.main = async (event, context) => {
--> -->
### 云函数URL化方式 ### 云函数URL化方式
云函数URL化,可以让云函数生成一个HTTP URL。在创建了普通云函数后,可以在Web控制台进行URL化配置。它本质上属于普通云函数的一种调用方式。 可以让云函数/云对象生成一个HTTP URL。可以在Web控制台进行URL化配置。它本质上属于云函数的一种调用方式。
由于篇幅较长,需另见文档[云函数URL化](/uniCloud/http) 由于篇幅较长,需另见文档[云函数URL化](http.md)
### uniCloud响应体规范@resformat ### uniCloud响应体规范@resformat
......
...@@ -9,14 +9,14 @@ uniCloud分为客户端和云端两部分,有些接口名称相同,参数也 ...@@ -9,14 +9,14 @@ uniCloud分为客户端和云端两部分,有些接口名称相同,参数也
|API |描述 | |API |描述 |
|-- |-- | |-- |-- |
|uniCloud.importObject() |获取云对象引用以调用云对象接口 [详情](uniCloud/cloud-obj.md) | |uniCloud.importObject() |获取云对象引用以调用云对象接口 [详情](cloud-obj.md) |
|uniCloud.callFunction() |客户端调用云函数 [详情](uniCloud/cf-functions.md?id=clientcallfunction) | |uniCloud.callFunction() |客户端调用云函数 [详情](cf-functions.md#clientcallfunction) |
|uniCloud.database() |客户端访问云数据库,获取云数据库对象引用 [详情](uniCloud/clientdb.md) | |uniCloud.database() |客户端访问云数据库,获取云数据库对象引用 [详情](clientdb.md) |
|uniCloud.uploadFile() |客户端直接上传文件到云存储 [详情](uniCloud/storage.md?id=uploadfile) | |uniCloud.uploadFile() |客户端直接上传文件到云存储 [详情](storage.md#uploadfile) |
|uniCloud.getTempFileURL() |客户端获取云存储文件的临时路径 [详情](uniCloud/storage.md?id=gettempfileurl) | |uniCloud.getTempFileURL() |客户端获取云存储文件的临时路径 [详情](storage.md#gettempfileurl) |
|uniCloud.chooseAndUploadFile() |客户端选择文件并上传 [详情](uniCloud/storage.md?id=chooseanduploadfile) | |uniCloud.chooseAndUploadFile() |客户端选择文件并上传 [详情](storage.md#chooseanduploadfile) |
|uniCloud.getCurrentUserInfo() |获取当前用户信息 [详情](#client-getcurrentuserinfo) | |uniCloud.getCurrentUserInfo() |获取当前用户信息 [详情](#client-getcurrentuserinfo) |
|uniCloud.init() |同时使用多个服务空间时初始化额外服务空间 [详情](uniCloud/init.md) | |uniCloud.init() |同时使用多个服务空间时初始化额外服务空间 [详情](init.md) |
|uniCloud.addInterceptor() |新增拦截器 [详情](#add-interceptor) | |uniCloud.addInterceptor() |新增拦截器 [详情](#add-interceptor) |
|uniCloud.removeInterceptor() |移除拦截器 [详情](#remove-interceptor) | |uniCloud.removeInterceptor() |移除拦截器 [详情](#remove-interceptor) |
|uniCloud.onResponse() |监听服务端(云函数、云对象、clientDB)响应 [详情](#on-response) | |uniCloud.onResponse() |监听服务端(云函数、云对象、clientDB)响应 [详情](#on-response) |
...@@ -36,7 +36,7 @@ uniCloud分为客户端和云端两部分,有些接口名称相同,参数也 ...@@ -36,7 +36,7 @@ uniCloud分为客户端和云端两部分,有些接口名称相同,参数也
- 此接口不会发送网络请求,**此接口仅仅是客户端接口,不校验token的合法性以及是否过期** - 此接口不会发送网络请求,**此接口仅仅是客户端接口,不校验token的合法性以及是否过期**
- 需要搭配uni-id使用并要求客户端必须将token存储在storage内的`uni_id_token` - 需要搭配uni-id使用并要求客户端必须将token存储在storage内的`uni_id_token`
- 如需获取role、permission需要将角色权限缓存在token内,此功能自uni-id 3.0.0其默认开启,参考:[缓存角色权限](uniCloud/uni-id.md?id=cache-permission-in-token) - 如需获取role、permission需要将角色权限缓存在token内,此功能自uni-id 3.0.0 或 uni-id-common中默认开启
用法:`uniCloud.getCurrentUserInfo()` 用法:`uniCloud.getCurrentUserInfo()`
...@@ -263,7 +263,7 @@ uniCloud.offResponse(logResponse) ...@@ -263,7 +263,7 @@ uniCloud.offResponse(logResponse)
> 新增于HBuilderX 3.5.0 > 新增于HBuilderX 3.5.0
用于监听客户端需要登录事件,此接口需要搭配uniIdRouter使用,参考:[uniIdRouter](uniCloud/uni-id.md?id=uni-id-router) 用于监听客户端需要登录事件,此接口需要搭配uniIdRouter使用,参考:[uniIdRouter](uni-id-summary.md#uni-id-router)
代码示例: 代码示例:
......
...@@ -148,7 +148,6 @@ _注:以上例子仅用于方便初学者理解。实际开发中对于简单 ...@@ -148,7 +148,6 @@ _注:以上例子仅用于方便初学者理解。实际开发中对于简单
4. 客户端调用时在ide里有完善的代码提示,方法参数均可提示。(传输json可没法在ide里提示) 4. 客户端调用时在ide里有完善的代码提示,方法参数均可提示。(传输json可没法在ide里提示)
5. 默认支持[uniCloud响应体规范](uniCloud/cf-functions.md?id=resformat),方便错误拦截和统一处理 5. 默认支持[uniCloud响应体规范](uniCloud/cf-functions.md?id=resformat),方便错误拦截和统一处理
注:目前云对象还不支持URL化和定时触发,未来会补充
## 快速上手 ## 快速上手
...@@ -404,9 +403,13 @@ module.exports = { ...@@ -404,9 +403,13 @@ module.exports = {
} }
``` ```
相关文档:[云函数url化的入参](uniCloud/cf-function.md?id=input) 相关文档:[云函数url化的入参](cf-functions.md#input)
## 预处理与后处理@before-and-after ## 内置特殊方法@before-and-after
注意:所有`_`开头的方法都是私有方法,客户端不可访问。也就是客户端调用云对象时不能调用_开头的方法。
目前有3个内置特殊方法:`_before``_after``_timing`
### 预处理 _before@before ### 预处理 _before@before
...@@ -463,7 +466,13 @@ module.exports = { ...@@ -463,7 +466,13 @@ module.exports = {
} }
``` ```
注意:所有`_`开头的方法都是私有方法,客户端不可访问。也就是客户端调用云对象时不能调用_开头的方法。 ### 定时运行 _timing
> 新增于HBuilderX 3.5.2
在 uniCloud web控制台可以配置定时任务。给一个云对象配置后,将定时执行该云对象的内置方法 `_after`
详细用法参考:[云对象使用定时触发](trigger.md#cloudobject)
## 云对象的返回值@return-value ## 云对象的返回值@return-value
...@@ -570,13 +579,13 @@ const res = await todo.add('title demo', 'content demo') ...@@ -570,13 +579,13 @@ const res = await todo.add('title demo', 'content demo')
> 新增于HBuilderX 3.5.2 > 新增于HBuilderX 3.5.2
详细用法参考:[云对象使用定时触发](uniCloud/trigger.md?id=cloudobject) 详细用法参考:[云对象使用定时触发](trigger.md#cloudobject)
### url化@http-trigger ### url化@http-trigger
> 新增于HBuilderX 3.5.2 > 新增于HBuilderX 3.5.2
详细用法参考:[云对象使用url化](uniCloud/http.md?id=cloudobject) 当需要外部系统访问云对象时,可以把云对象封装成一个HTTP的URL。详细用法参考:[云对象使用url化](http.md#cloudobject)
### 跨服务空间调用云对象@call-by-cloud-cross-space ### 跨服务空间调用云对象@call-by-cloud-cross-space
...@@ -598,6 +607,34 @@ const res = await todo.add('title demo', 'content demo') ...@@ -598,6 +607,34 @@ const res = await todo.add('title demo', 'content demo')
**注意** **注意**
- 上述示例代码,在实际开发中均应该使用 try catch 或 then catch 处理错误捕获 - 上述示例代码,在实际开发中均应该使用 try catch 或 then catch 处理错误捕获
### 云对象方法不能互相调用@call-internal-method
一个云对象导出的不同方法之间不能互相调用。比如下面示例中 tryAddTodo 方法内部无法调用 addTodo 方法。
只能将多个方法共享的逻辑放到云对象导出的对象外部来供云对象的方法调用。例如下面抽离公共函数 pureAddTodo :
```js
// todo.obj.js
async function pureAddTodo(title, content) {
// ...add todo 逻辑
}
module.exports = {
async tryAddTodo() {
try {
return addTodo(title, content)
} catch (e) {
return {
errCode: 'add-todo-failed'
}
}
},
async addTodo(title, content) {
return pureAddTodo(title, content)
}
}
```
### 云对象的接收参数的体积上限 ### 云对象的接收参数的体积上限
- 阿里云接收参数大小不可超过1MB - 阿里云接收参数大小不可超过1MB
- 腾讯云接收参数大小不可超过5MB - 腾讯云接收参数大小不可超过5MB
...@@ -726,30 +763,3 @@ uniCloud的服务器和客户端交互,有云函数、云对象、clientDB三 ...@@ -726,30 +763,3 @@ uniCloud的服务器和客户端交互,有云函数、云对象、clientDB三
如果服务器端不操作数据库外,或者还有复杂的、不宜公开在前端的逻辑,此时推荐使用云对象。 如果服务器端不操作数据库外,或者还有复杂的、不宜公开在前端的逻辑,此时推荐使用云对象。
但云对象仅适用于与uni-app前端交互使用。如果不与uni-app前端交互,比如使用云函数URL化与其他系统通信、或者使用定时云函数,此时不适用云对象,还是需要使用云函数。
### 云对象方法互相调用@call-internal-method
云对象导出的方法之间不能互相调用,如果开发中遇到需要方法间互相调用的场景,请考虑将多个方法共享的逻辑放到云对象导出的对象外部来供云对象的方法调用。例:
```js
// todo.obj.js
async function pureAddTodo(title, content) {
// ...add todo 逻辑
}
module.exports = {
async tryAddTodo() {
try {
return addTodo(title, content)
} catch (e) {
return {
errCode: 'add-todo-failed'
}
}
},
async addTodo(title, content) {
return pureAddTodo(title, content)
}
}
```
\ No newline at end of file
...@@ -7,10 +7,10 @@ ...@@ -7,10 +7,10 @@
简单来说,uniCloud和微信小程序云开发、支付宝小程序云开发一样稳定健壮,但有更多优势: 简单来说,uniCloud和微信小程序云开发、支付宝小程序云开发一样稳定健壮,但有更多优势:
- 跨平台。不管你在uniCloud里选择了阿里还是腾讯的serverless,均可以跨uni-app的全端使用。从pc到h5,从Android到iOS,以及各家小程序快应用,十几个平台全端支持 - 跨平台。不管你在uniCloud里选择了阿里还是腾讯的serverless,均可以跨uni-app的全端使用。从pc到h5,从Android到iOS,以及各家小程序快应用,十几个平台全端支持
- uniCloud提供了`clientDB`神器,减少90%的服务器开发工作量,且保障数据安全。[详见](/uniCloud/database) - uniCloud提供了`clientDB`神器,减少90%的服务器开发工作量,且保障数据安全。[详见](/uniCloud/database)
- uniCloud提供了[uni-id](/uniCloud/uni-id)[uniPay](/uniCloud/unipay)等重要框架,大幅减少开发者的相应功能开发量。 - uniCloud提供了[uni-id](uni-id-summary.md)[uniPay](/uniCloud/unipay)等重要框架,大幅减少开发者的相应功能开发量。
- uniCloud提供了[uni-starter](https://ext.dcloud.net.cn/plugin?id=5057),客户端开发工作量大幅减少。 - uniCloud提供了[uni-starter](https://ext.dcloud.net.cn/plugin?id=5057),客户端开发工作量大幅减少。
- uniCloud提供了[uniCloud admin](/uniCloud/admin),管理端开发工作量大幅减少。 - uniCloud提供了[uniCloud admin](/uniCloud/admin),管理端开发工作量大幅减少。
- uniCloud提供了[schema2code](/uniCloud/schema?id=autocode),只需编制数据库schema文件,用户端和管理端的数据列表、分页、搜索、详情查看、修改、删除,全套代码均能自动生成。 - uniCloud提供了[schema2code](schema2code.md),只需编制数据库schema文件,用户端和管理端的数据列表、分页、搜索、详情查看、修改、删除,全套代码均能自动生成。
- 更易学。uniCloud提供了`JQL`查询语言,比SQL和MongoDB的查询语法更简单易掌握,尤其是联表查询非常简单。[详见](https://uniapp.dcloud.io/uniCloud/database?id=jsquery) - 更易学。uniCloud提供了`JQL`查询语言,比SQL和MongoDB的查询语法更简单易掌握,尤其是联表查询非常简单。[详见](https://uniapp.dcloud.io/uniCloud/database?id=jsquery)
- 更完善的工具链。前端uni-app、云端uniCloud、还有ide端的HBuilderX,互相紧密搭配,打造闭环的优秀开发体验 - 更完善的工具链。前端uni-app、云端uniCloud、还有ide端的HBuilderX,互相紧密搭配,打造闭环的优秀开发体验
- 更丰富的生态。插件市场有大量现成的轮子和资源 [详见](https://ext.dcloud.net.cn/?cat1=7&orderBy=TotalDownload) - 更丰富的生态。插件市场有大量现成的轮子和资源 [详见](https://ext.dcloud.net.cn/?cat1=7&orderBy=TotalDownload)
...@@ -54,7 +54,7 @@ uniCloud提供了`云函数URL化`,来满足上述需求。[详见](https://un ...@@ -54,7 +54,7 @@ uniCloud提供了`云函数URL化`,来满足上述需求。[详见](https://un
### 微信云开发支持客户端直接操作数据库,uniCloud支持吗? ### 微信云开发支持客户端直接操作数据库,uniCloud支持吗?
uniCloud提供了比微信云开发更优秀的前端操作数据库方案,见:[clientDB](https://uniapp.dcloud.net.cn/uniCloud/database) uniCloud提供了比微信云开发更优秀的前端操作数据库方案,见:[clientDB](clientdb.md)
### 云开发是nodejs+改良版MongoDB组合,对比php+mysql的传统组合怎么样? ### 云开发是nodejs+改良版MongoDB组合,对比php+mysql的传统组合怎么样?
...@@ -114,7 +114,7 @@ uniCloud在MongoDB的基础上改良,进一步提供了`DB Schema`和`JQL`。 ...@@ -114,7 +114,7 @@ uniCloud在MongoDB的基础上改良,进一步提供了`DB Schema`和`JQL`。
1. 使用clientDB可以减少遇到冷启动问题的概率 1. 使用clientDB可以减少遇到冷启动问题的概率
2. 非高频访问的云函数,合并到高频云函数中。有的开发者使用纯单页方式编写云函数,即在一个云函数中通过路由处理实现了整个应用的所有后台逻辑。参考[插件](https://ext.dcloud.net.cn/search?q=%E8%B7%AF%E7%94%B1&cat1=7&orderBy=UpdatedDate) 2. 非高频访问的云函数,合并到高频云函数中。有的开发者使用纯单页方式编写云函数,即在一个云函数中通过路由处理实现了整个应用的所有后台逻辑。参考[插件](https://ext.dcloud.net.cn/search?q=%E8%B7%AF%E7%94%B1&cat1=7&orderBy=UpdatedDate)
3. 非高频访问的云函数,可以通过定时任务持续运行它(注意腾讯云可以使用这个方式完全避开冷启动,而阿里云的定时任务最短周期大于资源回收周期) 3. 非高频访问的云函数,可以通过定时任务持续运行它(注意腾讯云可以使用这个方式完全避开冷启动,而阿里云的定时任务最短周期大于资源回收周期)
4. 配置云函数的单实例多并发,请参考:[单实例多并发](uniCloud/cf-functions.md?id=concurrency) 4. 配置云函数的单实例多并发,请参考:[单实例多并发](cf-functions.md#concurrency)
### uniCloud访问速度感觉不如传统服务器?@slow ### uniCloud访问速度感觉不如传统服务器?@slow
有开发者在一台单机上安装php或java,连接同电脑的mysql。然后与uniCloud比较速度,认为uniCloud偏慢。这里需要澄清如下差异: 有开发者在一台单机上安装php或java,连接同电脑的mysql。然后与uniCloud比较速度,认为uniCloud偏慢。这里需要澄清如下差异:
...@@ -195,9 +195,8 @@ uniCloud.httpclient.request('https://example.com',{ ...@@ -195,9 +195,8 @@ uniCloud.httpclient.request('https://example.com',{
2. 使用[uni-cloud-router单路由云函数框架](https://uniapp.dcloud.net.cn/uniCloud/uni-cloud-router),这种方式只有一个云函数,所有接口都是这个云函数的不同参数,它有统一的路由管理。 2. 使用[uni-cloud-router单路由云函数框架](https://uniapp.dcloud.net.cn/uniCloud/uni-cloud-router),这种方式只有一个云函数,所有接口都是这个云函数的不同参数,它有统一的路由管理。
以免费空间的48个云函数举例,一般情况下: 以免费空间的48个云函数举例,一般情况下:
- 后台管理系统使用[uniCloud admin](https://uniapp.dcloud.net.cn/uniCloud/admin),会自带一个uni-admin的云函数; - [uni-id](uni-id-summary.md)会有一个云对象(uni-id-co)或老版的云函数(uni-id-cf),这是必备的一个云函数
- 前端项目,会有一个[uni-id](https://uniapp.dcloud.net.cn/uniCloud/uni-id)配套的user-center云函数。如果和uniCloud admin复用一个服务空间,此云函数也不需要; - 如果使用uni统计、app升级中心、uni发布平台、uniPush2、[uni-search热搜词统计跑批](https://ext.dcloud.net.cn/plugin?id=3851),这些会自带云函数
- 如果有热搜词统计跑批,[uni-search](https://ext.dcloud.net.cn/plugin?id=3851)配套一个云函数uni-analyse-searchhot;
上述几个是官方推荐的几个常用框架所带的云函数,然后开发者自己的代码里,大多数业务使用clientDB开发,不写云函数,或者写了配套的action云函数也不占用云函数数量;如果还需要自己写一些云函数,再加上uni-cloud-router,用这个单路由云函数搞定剩余需求;另外如果有跑批数据的需求可以再来一个云函数。所以无论如何48个云函数都占不满。 上述几个是官方推荐的几个常用框架所带的云函数,然后开发者自己的代码里,大多数业务使用clientDB开发,不写云函数,或者写了配套的action云函数也不占用云函数数量;如果还需要自己写一些云函数,再加上uni-cloud-router,用这个单路由云函数搞定剩余需求;另外如果有跑批数据的需求可以再来一个云函数。所以无论如何48个云函数都占不满。
......
此差异已折叠。
## 操作场景 ## 使用场景
云函数URL化 是 uniCloud 为开发者提供的 HTTP 访问服务,让开发者可以通过 HTTP URL 方式访问到云函数 云函数/云对象URL化 是 uniCloud 为开发者提供的 HTTP 访问服务,让开发者可以通过 HTTP URL 方式访问到云函数或云对象
- 场景1:比如App端微信支付,需要配服务器回调地址,此时需要一个HTTP URL。 - 场景1:比如App端微信支付,需要配服务器回调地址,此时需要一个HTTP URL。
- 场景2:非uni-app开发的系统,想要连接uniCloud,读数据,也需要通过HTTP URL方式访问。 - 场景2:非uni-app开发的系统,想要连接uniCloud,读数据,也需要通过HTTP URL方式访问。
url化后需要注意以下几点 url化后需要注意以下几点
- 安全:为了保障业务安全性,开发者需在代码中做好权限控制和安全防护,避免未授权访问触发敏感操作。 - 安全:为了保障业务安全性,开发者需在代码中做好权限控制和安全防护,避免未授权访问触发敏感操作。
- 计费:云函数开启了URL化后,如果遇到大量恶意访问,消耗云函数资源,开发者可以将云函数访问地址设置为空即可停止 HTTP 访问支持。 - 计费:云函数开启了URL化后,如果遇到大量恶意访问,消耗云函数资源,开发者可以将云函数访问地址设置为空即可停止 HTTP 访问支持。
> 云函数自上线就支持URL化。云对象的URL化需HBuilderX 3.5.2+。下文除非特别提到云对象,否则云函数通指普通云函数和云对象。
本文档主要指导您如何在uniCloud web控制台管理和使用云函数URL化。 本文档主要指导您如何在uniCloud web控制台管理和使用云函数URL化。
**使用限制** **使用限制**
...@@ -20,7 +22,7 @@ url化后需要注意以下几点 ...@@ -20,7 +22,7 @@ url化后需要注意以下几点
### 设置云函数 HTTP 访问地址@set-path ### 设置云函数 HTTP 访问地址@set-path
1. 登录[uniCloud后台](https://unicloud.dcloud.net.cn/),选择需要管理的服务空间。 1. 登录[uniCloud后台](https://unicloud.dcloud.net.cn/),选择服务空间。
2. 单击左侧菜单栏【云函数】,进入云函数页面。 2. 单击左侧菜单栏【云函数】,进入云函数页面。
3. 点击需要配置的云函数的【详情】按钮,配置访问路径。 3. 点击需要配置的云函数的【详情】按钮,配置访问路径。
...@@ -370,11 +372,11 @@ module.exports = { ...@@ -370,11 +372,11 @@ module.exports = {
} }
``` ```
如果通过`https://xxx.com/todo/addTodo?title=todo-title&content=todo-content`调用云对象,todo方法内的console.log会输出以下内容`{title: 'todo-title', content: 'todo-content'}` 如果通过`https://xxx.com/todo/addTodo?title=todo-title&content=todo-content`调用云对象,todo方法内的console.log会输出以下内容`{title: 'todo-title', content: 'todo-content'}`
需要注意的是自url内解析出的参数均为字符串类型。 需要注意的是自url内解析出的参数均为字符串类型。
**注意** **注意**
- url化方式调用云对象时,`_before``_after`均正常执行 - url化方式调用云对象时,`_before``_after`均正常执行
- 如果需要获取其他方式传入云对象的参数(如:post一个json内容到云对象),请使用[this.getHttpInfo](uniCloud/cloud-obj.md?id=get-http-info)获取 - 如果需要获取其他方式传入云对象的参数(如:post一个json内容到云对象),请使用[this.getHttpInfo](cloud-obj.md#get-http-info)获取
\ No newline at end of file \ No newline at end of file
...@@ -2,13 +2,22 @@ ...@@ -2,13 +2,22 @@
> 新增于HBuilderX 3.3.1版本 > 新增于HBuilderX 3.3.1版本
HBuilderX 3.3.1之前JQL只能在clientDB及JQL数据库管理里面使用,此次更新为云函数带来了JQL语法,云函数内也可以享受便捷的数据库操作语句编写 对于不适合在前端暴露的数据库操作,过去只能在云函数中使用传统MongoDB语法。此次更新让云函数也可以使用 JQL 来操作数据库
关于JQL语法及其他注意事项请参考此文档:[JQL数据库操作](uniCloud/jql.md) 相比于传统 MongoDB语法,JQL 为云函数带来如下价值:
## 为云函数启用jql扩展库@use-in-function 1. JQL 优化了联表查询、Tree查询、虚拟表查询等,比 MongoDB语法更易用
2. 支持 DB Schema,包括各种值域约束和权限校验。无需再开发接口的权限和数据合法性验证代码
需要开发者手动在云函数的package.json内添加云函数的扩展库。(如果云函数目录下没有package.json,可以通过在云函数目录下执行`npm init -y`来生成) 本文主要讲解云函数中如何使用 JQL 。详细的 JQL 语法另见文档:[JQL数据库操作](uniCloud/jql.md)
## 为云函数添加jql扩展库
JQL 操作的引擎代码体积不小,考虑到有的云函数并不操作数据库或不使用JQL,所以相关功能被剥离在`uni-cloud-jql`扩展库中。
HBuilderX 3.4起,新建云函数/云对象,**默认加载**`uni-cloud-jql`扩展库。对于老云函数,也可以对云函数点右键 -> 管理公共模块或扩展库依赖 -> 选择`uni-cloud-jql`
HBuilderX 3.4以前的开发者,需要在云函数的package.json内手动添加扩展库。(如果云函数目录下没有package.json,可以通过在云函数目录下执行`npm init -y`来生成)
下面是一个开启了jql扩展库的云函数的package.json示例,**注意不可有注释,以下文件内容中的注释仅为说明,如果拷贝此文件,切记去除注释** 下面是一个开启了jql扩展库的云函数的package.json示例,**注意不可有注释,以下文件内容中的注释仅为说明,如果拷贝此文件,切记去除注释**
...@@ -25,6 +34,12 @@ HBuilderX 3.3.1之前JQL只能在clientDB及JQL数据库管理里面使用,此 ...@@ -25,6 +34,12 @@ HBuilderX 3.3.1之前JQL只能在clientDB及JQL数据库管理里面使用,此
} }
``` ```
对于确定在云函数/云对象中不需要使用 JQL 扩展库的,请对云函数右键,取消`uni-cloud-jql`扩展库。这样可以减少云函数体积,提高性能。
## 云函数中使用@use-in-function
`uniCloud.databaseForJQL`方法,传入客户端信息,就可以得到一个JQL数据库操作对象。
```js ```js
// 简单的使用示例 // 简单的使用示例
'use strict'; 'use strict';
...@@ -40,7 +55,32 @@ exports.main = async (event, context) => { ...@@ -40,7 +55,32 @@ exports.main = async (event, context) => {
}; };
``` ```
上述示例中jql扩展将会使用event内带有的uniIdToken对应的用户作为执行数据库操作的用户,如需指定执行当前数据库操作的用户请使用`setUser`方法 ## 云对象中使用@use-in-object
> 新增于 HBuilderX 3.4.10
云对象中无法获取`event``context`,为方便在云对象中使用jql扩展,自HBuilderX 3.4.10起,`uniCloud.databaseForJQL`方法接收云对象`clientInfo`作为参数
**示例**
```js
module.exports = {
addTodo (title, content) {
const dbJQL = uniCloud.databaseForJQL({ // 获取JQL database引用,此处需要传入云对象的clientInfo
clientInfo: this.getClientInfo()
})
}
}
```
## setUser指定用户身份
上述示例中,jql扩展使用的是客户端的身份,准确的说是客户端的uniIdToken对应的用户作为执行数据库操作的用户。
如需在云函数/云对象中指定执行其他用户身份,需使用`setUser`方法
setUser方法的参数是一个json对象,可传入uni-id的uid、role、permission,组合生效。
例: 例:
...@@ -53,7 +93,7 @@ exports.main = async (event, context) => { ...@@ -53,7 +93,7 @@ exports.main = async (event, context) => {
}) })
dbJQL.setUser({ // 指定后续执行操作的用户信息,此虚拟用户将同时拥有传入的uid、role、permission dbJQL.setUser({ // 指定后续执行操作的用户信息,此虚拟用户将同时拥有传入的uid、role、permission
uid: 'user-id', // 建议此处使用真实uid uid: 'user-id', // 建议此处使用真实uid
role: ['admin'], // 指定当前执行用户的角色为admin role: ['admin'], // 指定当前执行用户的角色为admin。如果只希望指定为admin身份,可以删除uid和permission节点
permission: [] permission: []
}) })
const bookQueryRes = dbJQL.collection('book').where("name=='三国演义'").get() // 直接执行数据库操作 const bookQueryRes = dbJQL.collection('book').where("name=='三国演义'").get() // 直接执行数据库操作
...@@ -63,27 +103,16 @@ exports.main = async (event, context) => { ...@@ -63,27 +103,16 @@ exports.main = async (event, context) => {
}; };
``` ```
## 云对象中使用@use-in-object
> 新增于 HBuilderX 3.4.10 ## 与clientDB的差异
云对象中无法获取`event``context`,为方便在云对象中使用jql扩展,自HBuilderX 3.4.10起,`uniCloud.databaseForJQL`方法接收云对象`clientInfo`作为参数 虽然都使用 JQL,但云端和客户端还是有一点区别
**示例** - clientDB无论如何不可访问password类型字段,不管schema的权限如何,这类数据不传输到客户端。云函数内可以访问password类型字段,但受schema配置的权限约束。
- clientDB有action云函数的概念,为了弥补客户端操作数据库的不足。云函数没有再使用action的必要了。
```js
module.exports = {
addTodo (title, content) {
const dbJQL = uniCloud.databaseForJQL({ // 获取JQL database引用,此处需要传入云对象的clientInfo
clientInfo: this.getClientInfo()
})
}
}
```
## 注意事项 ## 注意事项
- JQL扩展依赖`uni-id`公共模块 - JQL扩展依赖`uni-id`公共模块
- JQL扩展库依赖redis扩展库进行数据缓存,未开通redis的服务空间无法使用缓存功能
- 启用了JQL扩展的云函数在本地调试时会自动使用本地schema、action、validateFunction以及uni-id公共模块 - 启用了JQL扩展的云函数在本地调试时会自动使用本地schema、action、validateFunction以及uni-id公共模块
- 由于此扩展会将`schema``action``validateFunction`带到模块内,如果你的上述文件较多会大幅增大云函数体积,因此启用此扩展的云函数**冷启动**时间会稍长,建议不要为太多云函数启用此扩展 - 由于此扩展会将`schema``action``validateFunction`带到模块内,如果你的上述文件较多会大幅增大云函数体积,因此启用此扩展的云函数**冷启动**时间会稍长,建议不要为太多云函数启用此扩展
\ No newline at end of file
## JQL数据库操作 ## JQL数据库操作
`jql`,全称javascript query language,是一种js方式操作数据库的语法规范。 `JQL`,全称 javascript query language,是一种js方式操作数据库的规范。
`jql`大幅降低了js工程师操作数据库的难度、大幅缩短开发代码量。并利用json数据库的嵌套特点,极大的简化了联表查询和树查询的复杂度。 - `JQL`大幅降低了js工程师操作数据库的难度,比SQL和传统MongoDB API更清晰、易掌握。
- `JQL`支持强大的[DB Schema](schema.md),内置数据规则和权限。DB Schema 支持[uni-id](uni-id-summary.md),可直接使用其角色和权限。无需再开发各种数据合法性校验和鉴权代码。
- `JQL`利用json数据库的嵌套特点,极大的简化了联表查询和树查询的复杂度,并支持更加灵活的虚拟表。
#### jql的诞生背景 #### jql的诞生背景
...@@ -163,7 +165,7 @@ db.collection('user').where({ ...@@ -163,7 +165,7 @@ db.collection('user').where({
**注意** **注意**
- 这些变量使用时并非直接获取对应的值,而是生成一个标记,在执行数据库操作时再将这个标记替换为实际的值 - 这些变量使用时并非直接获取对应的值,而是生成一个标记,在云端执行数据库操作时再将这个标记替换为实际的值
## jql条件语句的运算符@operator ## jql条件语句的运算符@operator
...@@ -2943,13 +2945,13 @@ const res = await db.collection('test').aggregate() ...@@ -2943,13 +2945,13 @@ const res = await db.collection('test').aggregate()
.end() .end()
``` ```
## 更新操作符@update-command ## 更新操作符(重命名或删除字段)@update-command
> 新增于 HBuilderX 3.5.1,JQL数据库管理支持使用更新操作符 > 新增于 HBuilderX 3.5.1,JQL数据库管理支持使用更新操作符
更新操作符可以在执行更新时使用。比如对字段重命名(rename)、删除字段(remove)等 更新操作符可以在执行更新时使用。比如对字段重命名(rename)、删除字段(remove)等。适用于表结构变更后,使用 HBuilderX 的 JQL管理器进行数据变更。
重命名字段示例 `db.command.rename`重命名字段
```js ```js
db.collection('test').update({ db.collection('test').update({
...@@ -2957,7 +2959,7 @@ db.collection('test').update({ ...@@ -2957,7 +2959,7 @@ db.collection('test').update({
}) })
``` ```
删除字段示例 `db.command.remove`删除字段
```js ```js
db.collection('test').update({ db.collection('test').update({
...@@ -2967,8 +2969,9 @@ db.collection('test').update({ ...@@ -2967,8 +2969,9 @@ db.collection('test').update({
**注意** **注意**
- 仅JQL数据库管理支持 - 仅 HBuilderX 3.5.1+ 中的 JQL数据库管理器中可用
- 使用更新操作符后,将完全跳过所有数据校验操作 - 支持批量传入重命名或删除指令
- 使用更新操作符后,将完全跳过所有数据校验操作,即无论schema中如何配置数据的值域规则,都将无法生效。所以更新操作符不宜与普通的数据增删改混在一起执行。
## DBSchema@schema ## DBSchema@schema
...@@ -3337,9 +3340,8 @@ module.exports = { ...@@ -3337,9 +3340,8 @@ module.exports = {
**参考:** **参考:**
- [uni-id 文档](https://uniapp.dcloud.net.cn/uniCloud/uni-id) - [uni-id 文档](uni-id-summary.md)
- [uni-config-center 文档](https://ext.dcloud.net.cn/plugin?id=4425) - [uni-config-center 文档](uni-config-center.md)
扩展库: 扩展库:
...@@ -3350,7 +3352,6 @@ module.exports = { ...@@ -3350,7 +3352,6 @@ module.exports = {
**注意** **注意**
- action上传后可能需要一段时间才会在云端生效,通常是3分钟左右 - action上传后可能需要一段时间才会在云端生效,通常是3分钟左右
## 数据库运算方法列表@aggregate-operator ## 数据库运算方法列表@aggregate-operator
uniCloud的云数据库,提供了一批强大的运算方法。这些方法是数据库执行的,而不是云函数执行的。 uniCloud的云数据库,提供了一批强大的运算方法。这些方法是数据库执行的,而不是云函数执行的。
...@@ -3562,16 +3563,16 @@ const res = await db.collection('stats') ...@@ -3562,16 +3563,16 @@ const res = await db.collection('stats')
groupField内可使用且仅能使用如下运算方法。 groupField内可使用且仅能使用如下运算方法。
|操作符 |用途 |用法 |说明 | |操作符 |用途 |用法 |说明 |
|--- |--- |--- |--- | |--- |--- |--- |--- |
|addToSet |向数组中添加值,如果数组中已存在该值,不执行任何操作 |addToSet(表达式) |- | |addToSet |向数组中添加值,如果数组中已存在该值,不执行任何操作 |addToSet(表达式) |- |
|avg |返回指定表达式对应数据的平均值 |avg(表达式) |- | |avg |返回指定表达式对应数据的平均值 |avg(表达式) |- |
|first |返回指定字段在一组集合的第一条记录对应的值。仅当这组集合是按照某种定义排序( sort )后,此操作才有意义 |first(表达式) |- | |first |返回指定字段在一组集合的第一条记录对应的值。仅当这组集合是按照某种定义排序( sort )后,此操作才有意义 |first(表达式) |- |
|last |返回指定字段在一组集合的最后一条记录对应的值。仅当这组集合是按照某种定义排序( sort )后,此操作才有意义。 |last(表达式) |- | |last |返回指定字段在一组集合的最后一条记录对应的值。仅当这组集合是按照某种定义排序( sort )后,此操作才有意义。 |last(表达式) |- |
|max |返回一组数值的最大值 |max(表达式) |- | |max |返回一组数值的最大值 |max(表达式) |- |
|min |返回一组数值的最小值 |min(表达式) |- | |min |返回一组数值的最小值 |min(表达式) |- |
|push |返回一组中表达式指定列与对应的值,一起组成的数组 |push(表达式) |- | |push |返回一组中表达式指定列与对应的值,一起组成的数组 |push(表达式) |- |
|stdDevPop |返回一组字段对应值的标准差 |stdDevPop(表达式) |- | |stdDevPop |返回一组字段对应值的标准差 |stdDevPop(表达式) |- |
|stdDevSamp |计算输入值的样本标准偏差 |stdDevSamp(表达式) |- | |stdDevSamp |计算输入值的样本标准偏差 |stdDevSamp(表达式) |- |
|sum |返回一组字段所有数值的总和 |sum(表达式) |- | |sum |返回一组字段所有数值的总和 |sum(表达式) |- |
|mergeObjects |将一组对象合并为一个对象 |mergeObjects(表达式) |在groupField内使用时仅接收一个参数 | |mergeObjects |将一组对象合并为一个对象 |mergeObjects(表达式) |在groupField内使用时仅接收一个参数 |
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
- 数据孤岛问题。当多个应用之间的数据库规范相同,他们之间的跨应用数据交换就变的更容易。未来uniCloud会提供更方便的跨应用数据交换机制。 - 数据孤岛问题。当多个应用之间的数据库规范相同,他们之间的跨应用数据交换就变的更容易。未来uniCloud会提供更方便的跨应用数据交换机制。
- 统一的初始数据。比如地区表等数据,在openDB中有初始化数据,开发者们共享一个相同数据源即可。 - 统一的初始数据。比如地区表等数据,在openDB中有初始化数据,开发者们共享一个相同数据源即可。
[uni-id](https://uniapp.dcloud.io/uniCloud/uni-id)的账户统一,是`openDB`的成功实践。基于uni-id规范,有电商插件、有IM插件、有PC管理插件,开发者可以方便的把这些插件整合到自己的同一应用中。 [uni-id](uni-id-summary.md)的账户统一,是`openDB`的成功实践。基于uni-id规范,有电商插件、有IM插件、有PC管理插件,开发者可以方便的把这些插件整合到自己的同一应用中。
## openDB中的已有规范 ## openDB中的已有规范
......
...@@ -41,40 +41,6 @@ Hello uniCloud 的源码地址:[https://ext.dcloud.net.cn/plugin?id=4082](http ...@@ -41,40 +41,6 @@ Hello uniCloud 的源码地址:[https://ext.dcloud.net.cn/plugin?id=4082](http
3. 运行 hello uniCloud项目 3. 运行 hello uniCloud项目
- 在运行菜单运行项目,浏览器、app、小程序均可。uniCloud项目是云端一体的,运行前端后控制台会同时出现前端和云端的控制台。 - 在运行菜单运行项目,浏览器、app、小程序均可。uniCloud项目是云端一体的,运行前端后控制台会同时出现前端和云端的控制台。
## 目录结构@structure
uniCloud云开发环境创建成功后,项目根目录下会有一个带有云图标的特殊目录,名为“uniCloud”。(即便是cli创建的项目,云函数目录也在项目的根目录下,而不是src下)
<pre v-pre="" data-lang="">
<code class="lang-" style="padding:0">
┌──uniCloud-aliyun 云空间目录,阿里云为uniCloud-aliyun,腾讯云为uniCloud-tcb。但HBuilderX项目管理器会隐藏显示后缀,只显示uniCloud
| |——— cloudfunctions 云函数目录
| | │───common 云函数公用模块目录 <a target="_blank" href="https://uniapp.dcloud.io/uniCloud/cf-common">详情</a>
| | | └──hello-common 云函数公用模块
| | | │──index.js 公用模块代码
| | | └──package.json 公用模块package.json
| | │───uni-clientDB-actions
| | │ └──new_action.js clientDB action代码 <a target="_blank" href="https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=action">详情</a>
| | └───function-name 普通云函数目录
| | │──index.js 云函数入口代码
| | └──package.json 包含云函数的配置信息,如url化、定时设置、内存等内容 <a target="_blank" href="https://uniapp.dcloud.io/uniCloud/cf-functions?id=packagejson">详情</a>
| | └───object-name 云对象目录
| | │──index.obj.js 云对象入口代码
| | └──package.json 包含云对象的配置信息<a target="_blank" href="https://uniapp.dcloud.io/uniCloud/cf-functions?id=packagejson">详情</a>
│ └──database 云数据目录
│ │──validateFunction 数据库扩展校验函数目录
│ │ └──new_validation.js 扩展校验函数代码 <a target="_blank" href="https://uniapp.dcloud.net.cn/uniCloud/schema?id=validatefunction">详情</a>
│ │──db_init.json db_init.json初始化数据库文件,其中不再包含schema <a target="_blank" href="https://uniapp.dcloud.net.cn/uniCloud/hellodb?id=db-init">详情</a>
│ └──xxx.schema.json 数据表xxx的 DB Schema <a target="_blank" href="https://uniapp.dcloud.net.cn/uniCloud/schema">详情</a>
根目录
</code>
</pre>
**注意**
- uniCloud目录是存放服务端文件的目录,它和前端代码在同一个项目下是为了方便管理。在发行前端部分,比如打包app、小程序、h5的代码包里并不会包含uniCloud目录。
- HBuilderX 3.0之前目录结构较老,没有uniCloud目录,根目录直接是cloudfunctions。不支持database和云对象,不推荐再使用老版。
## 开发自己的第一个uniCloud项目 ## 开发自己的第一个uniCloud项目
1. 创建uniCloud项目 1. 创建uniCloud项目
...@@ -87,9 +53,7 @@ uniCloud云开发环境创建成功后,项目根目录下会有一个带有云 ...@@ -87,9 +53,7 @@ uniCloud云开发环境创建成功后,项目根目录下会有一个带有云
一个开发者可以拥有多个服务空间,每个服务空间都是一个独立的serverless云环境,不同服务空间之间的云函数、数据库、存储都是隔离的。 一个开发者可以拥有多个服务空间,每个服务空间都是一个独立的serverless云环境,不同服务空间之间的云函数、数据库、存储都是隔离的。
服务空间和手机端项目是多对多绑定关系。同账号下,一个项目可以关联到多个服务空间。一个服务空间也可以被多个项目访问。 对项目根目录`uniCloud`点右键选择`关联云服务空间`,绑定之前创建的服务空间,或者新建一个服务空间。
对目录`uniCloud`点右键选择`关联云服务空间`,绑定之前创建的服务空间,或者新建一个服务空间。
3. 创建云函数/云对象 3. 创建云函数/云对象
...@@ -102,8 +66,8 @@ uniCloud云开发环境创建成功后,项目根目录下会有一个带有云 ...@@ -102,8 +66,8 @@ uniCloud云开发环境创建成功后,项目根目录下会有一个带有云
<img style="max-width:750px;" src="https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-dc-site/a18b3bb0-53d8-11eb-8ff1-d5dcf8779628.jpg"/> <img style="max-width:750px;" src="https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-dc-site/a18b3bb0-53d8-11eb-8ff1-d5dcf8779628.jpg"/>
</div> </div>
创建云函数后,生成一个目录,该目录下自动生成index.js,是该云函数的入口文件,不可改名。 - 创建云函数后,生成一个目录,该目录下自动生成index.js,是该云函数的入口文件,不可改名。
创建云对象后,生成一个目录,该目录下自动生成index.obj.js,是该云对象的入口文件,不可改名。 - 创建云对象后,生成一个目录,该目录下自动生成index.obj.js,是该云对象的入口文件,不可改名。
如果该云函数/云对象还需要引入其他js,可在index.js入口文件中引用。 如果该云函数/云对象还需要引入其他js,可在index.js入口文件中引用。
...@@ -128,7 +92,7 @@ module.exports = { ...@@ -128,7 +92,7 @@ module.exports = {
在项目首页,pages/index/index.vue 里,添加一个按钮,点击后执行异步方法sum。 在项目首页,pages/index/index.vue 里,添加一个按钮,点击后执行异步方法sum。
js中import这个 helloco 对象,调用它的 sum 方法 js 中 import 这个 helloco 对象,调用它的 sum 方法
```html ```html
<template> <template>
...@@ -166,6 +130,8 @@ HBuilderX自带一个云函数本地运行环境,运行项目时也默认选 ...@@ -166,6 +130,8 @@ HBuilderX自带一个云函数本地运行环境,运行项目时也默认选
可以对helloco云对象点右键上传到uniCloud服务空间,然后在前端控制台右上角切换为 连接云端云函数,那么此时客户端连接的就是真正的现网uniCloud服务器了。 可以对helloco云对象点右键上传到uniCloud服务空间,然后在前端控制台右上角切换为 连接云端云函数,那么此时客户端连接的就是真正的现网uniCloud服务器了。
关于运行调试,有单独文档,[详见](rundebug.md)
7. 小结 7. 小结
到此为止,你已经开发了第一个 first uniCloud 项目,完成了客户端和服务器的第一次交互。 到此为止,你已经开发了第一个 first uniCloud 项目,完成了客户端和服务器的第一次交互。
...@@ -182,18 +148,17 @@ HBuilderX自带一个云函数本地运行环境,运行项目时也默认选 ...@@ -182,18 +148,17 @@ HBuilderX自带一个云函数本地运行环境,运行项目时也默认选
如果要在cli项目中使用uniCloud,可以参考以下步骤 如果要在cli项目中使用uniCloud,可以参考以下步骤
1. 将cli项目导入`HBuilderX` 1. 将cli项目导入`HBuilderX`
2. 在项目根目录(src同级)创建`cloudfunctions-aliyun`或者`cloudfunctions-tcb`目录(HBuilderX 3.0以上版本请创建`uniCloud-aliyun``uniCloud-tcb`目录) 2. 如果没有appid的话,需要打开`src/manifest.json`,在`基础配置-->uni-app应用标识`处点击`重新获取`
3. 打开`src/manifest.json`,在`基础配置-->uni-app应用标示`处点击`重新获取` 3. 在项目根目录(src同级)点右键创建uniCloud云开发环境
4. 在步骤2创建的目录右键关联服务空间 4. 对uniCloud目录点右键关联服务空间
5. 完成 5. 完成
**注意** **注意**
- 运行与发行云函数只能使用HBuilderX的菜单,不可使用`package.json`内的命令 - 运行与发行云函数只能使用HBuilderX的菜单,不可使用`package.json`内的命令
- 如果HBuilderX菜单运行不能满足需求可以考虑自行初始化服务空间[服务空间初始化](uniCloud/init.md) - 如果HBuilderX菜单运行不能满足需求可以考虑自行初始化服务空间[服务空间初始化](uniCloud/init.md)
- 虽然uni-app支持vscode等其他ide开发,但因为uniCloud对安全性要求极高,仅支持使用HBuilderX开发
**Tips** - HBuilderX 也支持 cli。[详见](https://hx.dcloud.net.cn/cli/README)
- 虽然uni-app支持vscode等其他ide开发,但因为uniCloud对安全性要求极高,仅支持使用HBuilderX开发。
## web控制台@webcp ## web控制台@webcp
......
...@@ -36,13 +36,13 @@ keyword: 短信,sms ...@@ -36,13 +36,13 @@ keyword: 短信,sms
**注意** **注意**
- 如果使用uni-id发送短信,请参考[uni-id发送短信验证码](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=sendsmscode) - 如果使用uni-id发送短信,无需自行开发,请参考[uni-id-pages](uni-id-pages.md)
#### 云函数使用短信扩展库@extension #### 云函数使用短信扩展库@extension
自HBuilderX 3.4.0起,短信相关功能移至扩展库`uni-cloud-sms`内。在一段时间内无论开发者是否使用扩展库云函数都可以正常使用`uniCloud.sendSms`。预计于2022年3月初发布的HBuilderX内强制使用扩展库,即使用在此时间点后发布的HBuilderX上传云函数时如果没有指定使用`uni-cloud-sms`扩展库的云函数将无法调用uniCloud.sendSms接口。 自HBuilderX 3.4.0起,短信相关功能移至扩展库`uni-cloud-sms`内。在一段时间内无论开发者是否使用扩展库云函数都可以正常使用`uniCloud.sendSms`。预计于2022年3月初发布的HBuilderX内强制使用扩展库,即使用在此时间点后发布的HBuilderX上传云函数时如果没有指定使用`uni-cloud-sms`扩展库的云函数将无法调用uniCloud.sendSms接口。
关于扩展库的说明见:[云函数扩展库](uniCloud/cf-functions.md?id=extension) 关于扩展库的说明见:[云函数扩展库](cf-functions.md#extension)
在云函数的package.json内添加`uni-cloud-sms`的引用即可为云函数启用此扩展,无需做其他调整,完整的package.json示例如下: 在云函数的package.json内添加`uni-cloud-sms`的引用即可为云函数启用此扩展,无需做其他调整,完整的package.json示例如下:
...@@ -197,8 +197,8 @@ exports.main = async (event, context) => { ...@@ -197,8 +197,8 @@ exports.main = async (event, context) => {
- data内如果有`测试``test`等字样,系统可能会被判定为测试用途,不会真正把短信下发到对应手机(此行为由运营商控制,可能真实发送,也可能不发送) - data内如果有`测试``test`等字样,系统可能会被判定为测试用途,不会真正把短信下发到对应手机(此行为由运营商控制,可能真实发送,也可能不发送)
-[DCloud开发者中心](https://dev.dcloud.net.cn/uniSms)绑定`uniCloud`服务空间后,将会只允许绑定的服务空间调用此接口,绑定列表为空时表示不限制服务空间 -[DCloud开发者中心](https://dev.dcloud.net.cn/uniSms)绑定`uniCloud`服务空间后,将会只允许绑定的服务空间调用此接口,绑定列表为空时表示不限制服务空间
- 短信内容不可包含★、 ※、 →、 ●等特殊符号,可能会导致短信乱码 - 短信内容不可包含★、 ※、 →、 ●等特殊符号,可能会导致短信乱码
- 如果是用于用户注册的短信验证码,那么强烈推荐使用uni-id,这是一套云端一体的、完善的用户管理方案,已经内置封装好的短信验证码功能,详见:[https://uniapp.dcloud.net.cn/uniCloud/uni-id](https://uniapp.dcloud.net.cn/uniCloud/uni-id) - 如果是用于用户注册的短信验证码,那么强烈推荐使用uni-id,这是一套云端一体的、完善的用户管理方案,已经内置封装好的短信验证码功能,详见:[uni-id-pages](uni-id-pages.md)
- 发送短信如果需要图形验证码来防止机刷,可以使用[uni-captcha图形验证码](https://ext.dcloud.net.cn/plugin?id=4048)。在云端一体登录模板中已经集成了uni-id、uni-captcha,详见:[https://ext.dcloud.net.cn/plugin?id=13](https://ext.dcloud.net.cn/plugin?id=13) - 发送短信如果需要图形验证码来防止机刷,可以使用[uni-captcha图形验证码](https://ext.dcloud.net.cn/plugin?id=4048)。在[uni-id-pages](uni-id-pages.md)模板中已经集成了uni-id、uni-captcha
- Android手机在App端获取短信验证码,参考:[https://ask.dcloud.net.cn/article/676](https://ask.dcloud.net.cn/article/676) - Android手机在App端获取短信验证码,参考:[https://ask.dcloud.net.cn/article/676](https://ask.dcloud.net.cn/article/676)
- 短信内容超过70个字符时为长短信,需分条发送,每67个字按一条短信计算 - 短信内容超过70个字符时为长短信,需分条发送,每67个字按一条短信计算
- 如果本地运行提示`不支持的模板ID`,请更新到`2.9.9+`版本的HBuilderX - 如果本地运行提示`不支持的模板ID`,请更新到`2.9.9+`版本的HBuilderX
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
["cron:0 0 * * * *"] ["cron:0 0 * * * *"]
``` ```
**在package.json内配置定时触发时统一了腾讯阿里的写法,请参考:[云函数package.json](uniCloud/cf-functions.md?id=packagejson)** **在package.json内配置定时触发时统一了腾讯阿里的写法,请参考:[云函数package.json](cf-functions.md#packagejson)**
**注意** **注意**
...@@ -109,7 +109,7 @@ Cron 表达式有七个**必需**字段,按空格分隔。其中,每个字 ...@@ -109,7 +109,7 @@ Cron 表达式有七个**必需**字段,按空格分隔。其中,每个字
配置方式和云函数一致,请参阅上方章节 配置方式和云函数一致,请参阅上方章节
配置完成后会触发云对象导出的`_timing`方法 配置完成后会定时触发云对象内置特殊方法`_timing`
云对象代码示例: 云对象代码示例:
......
...@@ -246,7 +246,7 @@ uni.navigateTo({ ...@@ -246,7 +246,7 @@ uni.navigateTo({
}) })
``` ```
可以配套使用[uniIdRouter](uniCloud/uni-id.md?id=uni-id-router);当用户未登录,但访问了需强制登录的页面,或接口提示token无效或过期(响应体以TOKEN_INVALID开头)时均需要打开登录页面。你需要把以上两个路径路径定义为`loginPage` 可以配套使用[uniIdRouter](uni-id-summary.md#uni-id-router);当用户未登录,但访问了需强制登录的页面,或接口提示token无效或过期(响应体以TOKEN_INVALID开头)时均需要打开登录页面。你需要把以上两个路径路径定义为`loginPage`
# 云对象(uni-id-co) # 云对象(uni-id-co)
......
本文档适用于`uni-id 4.0.0`及以上版本,需 HBuilderX 3.5.0 及以上版本。旧版本文档请访问:[uni-id 3.x.x 文档](uniCloud/uni-id-3.md) 本文档适用于`uni-id 4.0.0`及以上版本,需 HBuilderX 3.5.0 及以上版本。旧版本文档请访问:[uni-id 3.x.x 文档](uni-id-3.md)
## 需求背景 ## 需求背景
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
`uni-id``uniCloud`开发者提供了开源、易用、安全、丰富、可扩展的用户管理框架。 `uni-id``uniCloud`开发者提供了开源、易用、安全、丰富、可扩展的用户管理框架。
[clientDB](uniCloud/clientDB)[DB Schema](uniCloud/schema)[uni-starter](https://ext.dcloud.net.cn/plugin?id=5057)[uni-admin](uniCloud/admin),这些产品都基于`uni-id`的账户体系。可以说`uni-id`是uniCloud不可或缺的基础能力。 [clientDB](clientDB.md)[DB Schema](schema.md)[uni-starter](https://ext.dcloud.net.cn/plugin?id=5057)[uni-admin](admin.md),这些产品都基于`uni-id`的账户体系。可以说`uni-id`是uniCloud不可或缺的基础能力。
## uni-id 的价值 ## uni-id 的价值
...@@ -69,7 +69,7 @@ ...@@ -69,7 +69,7 @@
1. 云数据库的uni-id相关表 1. 云数据库的uni-id相关表
数据库是一个系统的核心,uni-id首先规范化了十几张用户相关的[opendb数据表](uniCloud/opendb) 数据库是一个系统的核心,uni-id首先规范化了十几张用户相关的[opendb数据表](opendb.md)
其中最为重要的4张opendb表,如下: 其中最为重要的4张opendb表,如下:
- 用户表 [uni-id-users](https://gitee.com/dcloud/opendb/blob/master/collection/uni-id-users/collection.json) - 用户表 [uni-id-users](https://gitee.com/dcloud/opendb/blob/master/collection/uni-id-users/collection.json)
...@@ -89,13 +89,13 @@ uni-id-common公共模块包含了账户体系服务端的核心权限、token ...@@ -89,13 +89,13 @@ uni-id-common公共模块包含了账户体系服务端的核心权限、token
uniCloud众多功能(如`DB Schema`的权限、uni-id-co)也都依赖 uni-id-common。 uniCloud众多功能(如`DB Schema`的权限、uni-id-co)也都依赖 uni-id-common。
[详见](uniCloud/uni-id-common.md) [详见](uni-id-common.md)
3. 云端[uni-config-center](/uniCloud/uni-config-center.md)下的uni-id配置 3. 云端[uni-config-center](uni-config-center.md)下的uni-id配置
`uni-id`在云端有很多配置,比如密码加密秘钥、短信和微信登录的appsecret等等。在`uni-config-center`下的`uni-id`目录下的config.json里存放着这些配置。 `uni-id`在云端有很多配置,比如密码加密秘钥、短信和微信登录的appsecret等等。在`uni-config-center`下的`uni-id`目录下的config.json里存放着这些配置。
[详见](uniCloud/uni-id-summary.md?id=config) [见下](#config)
4. 客户端API 4. 客户端API
uni-app框架内置了uni-id的token管理。 uni-app框架内置了uni-id的token管理。
...@@ -103,18 +103,18 @@ uni-app框架内置了uni-id的token管理。 ...@@ -103,18 +103,18 @@ uni-app框架内置了uni-id的token管理。
uni-app与uniCloud搭配且使用uni-id,登录后自动下发token、网络传输层自动传输token(uni-app 2.7.13+版本)、token临近过期会自动续期(uni-app 3.4.13 +版本),也就是说开发者无需自己管理token了。 uni-app与uniCloud搭配且使用uni-id,登录后自动下发token、网络传输层自动传输token(uni-app 2.7.13+版本)、token临近过期会自动续期(uni-app 3.4.13 +版本),也就是说开发者无需自己管理token了。
uni-app客户端还有一批uni-id相关的内置API: uni-app客户端还有一批uni-id相关的内置API:
- uniIDHasRole:判断当前用户是否拥有某角色。[详情](/api/global.html#uniidhasrole) - uniIDHasRole:判断当前用户是否拥有某角色。[详情](/api/global.md#uniidhasrole)
- uniIDHasPermission:判断当前用户是否拥有某权限。[详情](/api/global.html#uniidhaspermission) - uniIDHasPermission:判断当前用户是否拥有某权限。[详情](/api/global.md#uniidhaspermission)
- uniCloud.getCurrentUserInfo():客户端获取当前用户信息。[详情](/uniCloud/client-sdk.html#client-getcurrentuserinfo) - uniCloud.getCurrentUserInfo():客户端获取当前用户信息。[详情](client-sdk.md#client-getcurrentuserinfo)
5. 云端一体页面模板 [uni-id-pages](uniCloud/uni-id-pages)(含uni-id-co) 5. 云端一体页面模板 [uni-id-pages](uniCloud/uni-id-pages)(含uni-id-co)
基于uni-id-common,DCloud还提供了一组完整的前端页面和后端[云对象](/uniCloud/cloud-obj.html) ,合称`uni-id-pages` 基于uni-id-common,DCloud还提供了一组完整的前端页面和后端[云对象](cloud-obj.md) ,合称`uni-id-pages`
uni-id-pages的功能包括:用户注册(含用户协议、隐私协议)、退出、修改密码、忘记密码等各种功能,同时适配PC宽屏和各种手机平台(App、H5、小程序)。 uni-id-pages的功能包括:用户注册(含用户协议、隐私协议)、退出、修改密码、忘记密码等各种功能,同时适配PC宽屏和各种手机平台(App、H5、小程序)。
此外,DCloud的其他产品也为uni-id提供了众多支持: 此外,DCloud的其他产品也为uni-id提供了众多支持:
- [uni-admin后台管理框架](/uniCloud/admin.html),为uni-id提供了现成的用户、角色、权限的后台管理功能,以及注册用户统计报表。 - [uni-admin后台管理框架](admin.md),为uni-id提供了现成的用户、角色、权限的后台管理功能,以及注册用户统计报表。
以上全部是开源的。 以上全部是开源的。
...@@ -124,25 +124,25 @@ uni-id-pages的功能包括:用户注册(含用户协议、隐私协议) ...@@ -124,25 +124,25 @@ uni-id-pages的功能包括:用户注册(含用户协议、隐私协议)
老的公共模块uni-id是一个大而全的账户管理公共模块,体积太大,不适合被其他云函数引用。比如某个业务云函数需要校验用户token,引用的uni-id公共模块还包含了忘记密码的代码,很浪费资源。 老的公共模块uni-id是一个大而全的账户管理公共模块,体积太大,不适合被其他云函数引用。比如某个业务云函数需要校验用户token,引用的uni-id公共模块还包含了忘记密码的代码,很浪费资源。
在云对象发布之前,DCloud基于云函数方式提供了uni-id-cf。但在HBuilderX 3.5 以后,推荐使用基于云对象的[uni-id-pages](uniCloud/uni-id-pages),代码更简单清晰。 在云对象发布之前,DCloud基于云函数方式提供了uni-id-cf。但在HBuilderX 3.5 以后,推荐使用基于云对象的[uni-id-pages](uni-id-pages.md),代码更简单清晰。
从HBuilder 3.5起,[uni-id](https://ext.dcloud.net.cn/plugin?id=2116)和uni-id-cf都将被淘汰,不再更新。老的公共模块uni-id被拆开,变成了[uni-id-common](uniCloud/uni-id-common)公共模块和uni-id-co云对象。 从HBuilder 3.5起,[uni-id](https://ext.dcloud.net.cn/plugin?id=2116)和uni-id-cf都将被淘汰,不再更新。老的公共模块uni-id被拆开,变成了[uni-id-common](uni-id-common.md)公共模块和uni-id-co云对象。
uni-id-common很精简,只包括token和权限,适合被所有云函数引用。 uni-id-common很精简,只包括token和权限,适合被所有云函数引用。
uni-id-co则是一个更加比uni-id-cf更完善和规范的用户管理的云对象。 uni-id-co则是一个更加比uni-id-cf更完善和规范的用户管理的云对象。
老版升级指南,[详见](uniCloud/uni-id-pages?id=m-to-co) 老版升级指南,[详见](uni-id-pages.md#m-to-co)
## 快速上手@start ## 快速上手@start
uni-id-common的插件市场地址为:[uni-id-common插件](【待定】)。但一般不需要单独下载这个插件,但更新uni-id-common公共模块时需要从这里下载更新。 uni-id-common的插件市场地址为:[uni-id-common插件](https://ext.dcloud.net.cn/plugin?id=8576)。但一般不需要单独下载这个插件,但更新uni-id-common公共模块时需要从这里下载更新。
一般推荐直接使用uni-starter项目模板来开始开发,或者在新项目里导入uni-id-pages页面模板来使用。 一般推荐直接使用uni-starter项目模板来开始开发,或者在新项目里导入uni-id-pages页面模板来使用。
uni-id云端的配置是依赖[uni-config-center](/uniCloud/uni-config-center)公用模块的,在工程目录uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json。(如未安装uni-config-center需安装,如缺少目录需手动创建) uni-id云端的配置是依赖[uni-config-center](uni-config-center.md)公用模块的,在工程目录uniCloud/cloudfunctions/common/uni-config-center/uni-id/config.json。(如未安装uni-config-center需安装,如缺少目录需手动创建)
uni-id云端同时依赖了公共模块[uni-captcha](https://ext.dcloud.net.cn/plugin?id=4048),这个功能模块负责生成和校验验证码,进行人机验证。 uni-id云端同时依赖了公共模块[uni-captcha](https://ext.dcloud.net.cn/plugin?id=4048),这个功能模块负责生成和校验验证码,进行人机验证。
...@@ -154,7 +154,7 @@ uni-id云端同时依赖了公共模块[uni-captcha](https://ext.dcloud.net.cn/p ...@@ -154,7 +154,7 @@ uni-id云端同时依赖了公共模块[uni-captcha](https://ext.dcloud.net.cn/p
你的应用采用什么方式注册登录?比如用户名密码、手机号+短信验证码、或者微信登录。 你的应用采用什么方式注册登录?比如用户名密码、手机号+短信验证码、或者微信登录。
很多登录方式涉及三方服务,需要开通[短信验证码服务](uniCloud/send-sms)、开通[App一键登录](https://uniapp.dcloud.net.cn/univerify.html)、或者向微信等申请登录的appid和appsecret信息。 很多登录方式涉及三方服务,需要开通[短信验证码服务](send-sms.md)、开通[App一键登录](univerify.md)、或者向微信等申请登录的appid和appsecret信息。
申请开通相关服务后,需要把配置信息填写在云端配置文件config.json中。 申请开通相关服务后,需要把配置信息填写在云端配置文件config.json中。
...@@ -308,8 +308,8 @@ uni-id云端会在login方法成功后自动返回token,uni-app前端框架会 ...@@ -308,8 +308,8 @@ uni-id云端会在login方法成功后自动返回token,uni-app前端框架会
## 用户角色权限@rbac ## 用户角色权限@rbac
为什么需要角色权限管理? 为什么需要角色权限管理?
- 企业管理系统,比如[uni-admin](/uniCloud/admin),除了超级管理员,不同账号通常需根据职位、责任设定不同的系统权限。比如部门管理员、Hr。 - 企业管理系统,比如[uni-admin](admin.md),除了超级管理员,不同账号通常需根据职位、责任设定不同的系统权限。比如部门管理员、Hr。
- [clientDB](/uniCloud/database)允许前端直接操作数据库,但部分字段应该是系统计算或管理员设置的,比如文章的阅读数、收藏数及是否加精置顶,这些字段不允许普通用户在前端通过clientDB直接修改,此时也需要通过权限控制来保证系统的安全稳定。 - [clientDB](clientdb.md)允许前端直接操作数据库,但部分字段应该是系统计算或管理员设置的,比如文章的阅读数、收藏数及是否加精置顶,这些字段不允许普通用户在前端通过clientDB直接修改,此时也需要通过权限控制来保证系统的安全稳定。
`uni-id`基于经典的RBAC模型实现了角色权限系统。 `uni-id`基于经典的RBAC模型实现了角色权限系统。
...@@ -461,7 +461,7 @@ RBAC:Role-Based Access Control,基于角色的访问控制。 ...@@ -461,7 +461,7 @@ RBAC:Role-Based Access Control,基于角色的访问控制。
### 其他说明 ### 其他说明
uni-id将用户的角色权限缓存在token内。详情参考:[缓存角色权限](uniCloud/uni-id-summary?id=cache-permission-in-token) uni-id将用户的角色权限缓存在token内。详情参考:[缓存角色权限](#cache-permission-in-token)
如下是通过token判断权限的简单示例: 如下是通过token判断权限的简单示例:
...@@ -477,11 +477,11 @@ function hasPermission(token, permission) { ...@@ -477,11 +477,11 @@ function hasPermission(token, permission) {
} }
``` ```
注意:**在uniCloud admin中,封装了可视化的用户、权限、角色的管理,新增删除修改均支持。**无需自己维护。[详见](https://uniapp.dcloud.net.cn/uniCloud/admin?id=mutiladmin) 注意:**在uniCloud admin中,封装了可视化的用户、权限、角色的管理,新增删除修改均支持。**无需自己维护。[详见](admin.md#mutiladmin)
## uni-id数据表@db-schema ## uni-id数据表@db-schema
`uni-id`的所有数据表,都在[opendb](https://gitee.com/dcloud/opendb/)规范中。 `uni-id`的所有数据表,都在[opendb](opendb.md)规范中。
在unicloud [web控制台](https://unicloud.dcloud.net.cn/) 新建数据表时,可以从`uni-id`的模板分类里找到下面的表,并一键创建这些表。HBuilderX 3.4.11起新建 DB Schema 也有模板可选择。 在unicloud [web控制台](https://unicloud.dcloud.net.cn/) 新建数据表时,可以从`uni-id`的模板分类里找到下面的表,并一键创建这些表。HBuilderX 3.4.11起新建 DB Schema 也有模板可选择。
...@@ -495,16 +495,16 @@ function hasPermission(token, permission) { ...@@ -495,16 +495,16 @@ function hasPermission(token, permission) {
| ---------------- | --------- | ---- | ------------------------------------------- | | ---------------- | --------- | ---- | ------------------------------------------- |
| \_id | Object ID | 是 | 存储文档 ID(用户 ID),系统自动生成 | | \_id | Object ID | 是 | 存储文档 ID(用户 ID),系统自动生成 |
| username | String | 否 | 用户名,不允许重复 | | username | String | 否 | 用户名,不允许重复 |
| password | String | 否 | 密码。加密存储 | | password | password | 否 | 密码。加密存储 |
| nickname | String | 否 | 用户昵称 | | nickname | String | 否 | 用户昵称 |
| gender | Integer | 否 | 用户性别:0 未知 1 男性 2 女性 | | gender | int | 否 | 用户性别:0 未知 1 男性 2 女性 |
| role | Array | 否 | 用户角色列表,由role_id组成的数组 | | role | Array | 否 | 用户角色列表,由role_id组成的数组 |
| status | Integer | 是 | 用户状态:0 正常,1 禁用,2 审核中,3 审核拒绝,4 已注销 | | status | int | 是 | 用户状态:0 正常,1 禁用,2 审核中,3 审核拒绝,4 已注销 |
| dcloud_appid | Array | 否 | 允许登录的客户端的appid列表,不同应用同时复用一个user表时适用,比如 司机端和乘客端是2个appid,在登陆时可以隔离,[详见](uniCloud/uni-id-summary?id=isolate-user)| | dcloud_appid | Array | 否 | 允许登录的客户端的appid列表,不同应用同时复用一个user表时适用,比如 司机端和乘客端是2个appid,在登陆时可以隔离,[见下](#isolate-user)|
| mobile | String | 否 | 手机号码 | | mobile | String | 否 | 手机号码 |
| mobile_confirmed | Integer | 否 | 手机号验证状态:0 未验证 1 已验证,未验证用户不可登录 | | mobile_confirmed | int | 否 | 手机号验证状态:0 未验证 1 已验证,未验证用户不可登录 |
| email | String | 否 | 邮箱地址 | | email | String | 否 | 邮箱地址 |
| email_confirmed | Integer | 否 | 邮箱验证状态:0 未验证 1 已验证,未验证用户不可登录 | | email_confirmed | int | 否 | 邮箱验证状态:0 未验证 1 已验证,未验证用户不可登录 |
| avatar | String | 否 | 头像地址 | | avatar | String | 否 | 头像地址 |
| wx_unionid | String | 否 | 微信unionid | | wx_unionid | String | 否 | 微信unionid |
| wx_openid | Object | 否 | 微信各个平台openid。子结构详见下文 | | wx_openid | Object | 否 | 微信各个平台openid。子结构详见下文 |
...@@ -525,11 +525,12 @@ function hasPermission(token, permission) { ...@@ -525,11 +525,12 @@ function hasPermission(token, permission) {
**注意** **注意**
- 本表格只列出部分字段,完整字段[详见](https://gitee.com/dcloud/opendb/blob/master/collection/uni-id-users/collection.json)
- 最后登录时间、IP,并非只有登录操作会修改,token刷新时也会修改最后登录时间、ip。应用启动时若token有效则不会触发登录行为,也不会更新本值。 - 最后登录时间、IP,并非只有登录操作会修改,token刷新时也会修改最后登录时间、ip。应用启动时若token有效则不会触发登录行为,也不会更新本值。
**wx_openid字段定义** **wx_openid字段定义**
> opendb中uni-id-users表1.0.0调整为下面的结构,uni-id-co使用此标准。如何处理旧数据请参考:[自uni-id升级为uni-id-co+uni-id-common](uniCloud/uni-id-pages.md?id=m-to-co) > opendb中uni-id-users表1.0.0调整为下面的结构,uni-id-co使用此标准。如何处理旧数据请参考:[自uni-id升级为uni-id-co+uni-id-common](uni-id-pages.md#m-to-co)
| 字段 | 类型 | 必填 | 描述 | | 字段 | 类型 | 必填 | 描述 |
| ------- | ------| ---- | -------- | | ------- | ------| ---- | -------- |
...@@ -540,7 +541,7 @@ function hasPermission(token, permission) { ...@@ -540,7 +541,7 @@ function hasPermission(token, permission) {
**qq_openid字段定义** **qq_openid字段定义**
> opendb中uni-id-users表1.0.0调整为下面的结构,uni-id-co使用此标准。如何处理旧数据请参考:[自uni-id升级为uni-id-co+uni-id-common](uniCloud/uni-id-pages.md?id=m-to-co) > opendb中uni-id-users表1.0.0调整为下面的结构,uni-id-co使用此标准。如何处理旧数据请参考:[自uni-id升级为uni-id-co+uni-id-common](uni-id-pages.md#m-to-co)
| 字段 | 类型 | 必填 | 描述 | | 字段 | 类型 | 必填 | 描述 |
| ------- | ------| ---- | -------- | | ------- | ------| ---- | -------- |
...@@ -583,7 +584,7 @@ function hasPermission(token, permission) { ...@@ -583,7 +584,7 @@ function hasPermission(token, permission) {
用户集合示例: 用户集合示例:
``` ```json
{ {
"_id": "f2a60d815ee1da3900823d45541bb162", "_id": "f2a60d815ee1da3900823d45541bb162",
"username": "姓名" "username": "姓名"
...@@ -606,7 +607,7 @@ function hasPermission(token, permission) { ...@@ -606,7 +607,7 @@ function hasPermission(token, permission) {
例:项目内只使用了微信登录,不使用其他登录方式,可以只保留`wx_unionid、wx_openid.mp`这些账号相关的索引,删除其他登录方式的索引(比如username、mobile) 例:项目内只使用了微信登录,不使用其他登录方式,可以只保留`wx_unionid、wx_openid.mp`这些账号相关的索引,删除其他登录方式的索引(比如username、mobile)
不了解索引请参考:[索引](/uniCloud/db-index.html) 不了解索引请参考:[索引](db-index.md)
### 验证码表 ### 验证码表
...@@ -777,8 +778,8 @@ uniIdRouter 是一个运行在前端的、对前端页面访问权限路由进 ...@@ -777,8 +778,8 @@ uniIdRouter 是一个运行在前端的、对前端页面访问权限路由进
以下为登录页面跳转到之前访问页面的简单示例: 以下为登录页面跳转到之前访问页面的简单示例:
pages/login/login.vue
```html ```html
// pages/login/login.vue
<template> <template>
<view> <view>
<button @click="login">login</button> <button @click="login">login</button>
...@@ -840,8 +841,8 @@ module.exports = { ...@@ -840,8 +841,8 @@ module.exports = {
} }
``` ```
客户端add-todo.vue
```html ```html
// 客户端add-todo.vue
<template> <template>
<!-- 略 --> <!-- 略 -->
</template> </template>
...@@ -869,7 +870,7 @@ module.exports = { ...@@ -869,7 +870,7 @@ module.exports = {
- pages.json内有`uniIdRouter`节点上述逻辑才会生效,自HBuilderX 3.5.0起创建空项目模板会自动配置空的`uniIdRouter`节点 - pages.json内有`uniIdRouter`节点上述逻辑才会生效,自HBuilderX 3.5.0起创建空项目模板会自动配置空的`uniIdRouter`节点
- uniIdRouter底层使用navigateTo、redirectTo、reLaunch、switchTab的拦截器进行页面跳转拦截,不会拦截进入首页和点击原生tabbar。 - uniIdRouter底层使用navigateTo、redirectTo、reLaunch、switchTab的拦截器进行页面跳转拦截,不会拦截进入首页和点击原生tabbar。
一般tabbar页面都不做自动跳转,而是在页面内再提供登录按钮。比如tabbar上有购物车或个人中心,点击购物车后在购物车页面内部会放一个提示语和按钮,告知用户需要登录。 一般tabbar页面都不做自动跳转,而是在页面内再提供登录按钮。比如tabbar上有购物车或个人中心,点击购物车后在购物车页面内部会放一个提示语和按钮,告知用户需要登录。
在页面内判断用户是否登录,使用API[uniCloud.getCurrentUserInfo()](https://uniapp.dcloud.io/uniCloud/client-sdk.html#client-getcurrentuserinfo) 在页面内判断用户是否登录,使用API[uniCloud.getCurrentUserInfo()](client-sdk.md#client-getcurrentuserinfo)
## 云端错误码@errcode ## 云端错误码@errcode
...@@ -920,7 +921,7 @@ uni-id-user表中有一个数组型字段`dcloud_appid`,可以存贮这个用 ...@@ -920,7 +921,7 @@ uni-id-user表中有一个数组型字段`dcloud_appid`,可以存贮这个用
uni-id 3.3.0版本起用户注册时会自动在用户表的记录内标记为注册应用对应的用户,如果没有单独授权登录其他应用的话则只能登录这个应用。即在乘客端应用注册的,默认只能在乘客端应用登录。 uni-id 3.3.0版本起用户注册时会自动在用户表的记录内标记为注册应用对应的用户,如果没有单独授权登录其他应用的话则只能登录这个应用。即在乘客端应用注册的,默认只能在乘客端应用登录。
如何授权登录其他应用请参考:[授权、禁止用户在特定客户端应用登录](uniCloud/uni-id-summary?id=authorize-app) 如何授权登录其他应用请参考:[授权、禁止用户在特定客户端应用登录](#authorize-app)
需要注意的是客户端APPID信息是由端上传上来的,并非完全可信,尽量在入口处进行校验。例: 需要注意的是客户端APPID信息是由端上传上来的,并非完全可信,尽量在入口处进行校验。例:
...@@ -960,11 +961,11 @@ exports.main = async function(event, context){ ...@@ -960,11 +961,11 @@ exports.main = async function(event, context){
**示例** **示例**
> 数组每一项都是一个完整的配置文件,全部选项请参考:[uni-id 配置](uniCloud/uni-id-summary?id=config) > 数组每一项都是一个完整的配置文件,全部选项请参考:[uni-id 配置](#config)
**注意:如果允许同一账号在不同端使用相同的账号+密码登录需要将不同端的passwordSecret设置成一样的** **注意:如果允许同一账号在不同端使用相同的账号+密码登录需要将不同端的passwordSecret设置成一样的**
```js ```json
[{ [{
"dcloudAppid": "__UNI__xxxx1", // 务必替换为对应项目manifest.json内的DCloud Appid "dcloudAppid": "__UNI__xxxx1", // 务必替换为对应项目manifest.json内的DCloud Appid
"isDefaultConfig": true, // 默认配置标记,未匹配到dcloudAppid的情况下使用默认配置 "isDefaultConfig": true, // 默认配置标记,未匹配到dcloudAppid的情况下使用默认配置
...@@ -1112,6 +1113,3 @@ module.exports = { ...@@ -1112,6 +1113,3 @@ module.exports = {
``` ```
uni-id会自动进行语言匹配,无需额外配置 uni-id会自动进行语言匹配,无需额外配置
...@@ -24,7 +24,7 @@ App/小程序/网站做好后,如何告知你的用户? ...@@ -24,7 +24,7 @@ App/小程序/网站做好后,如何告知你的用户?
`uni-publish 统一发布页`具有如下特征: `uni-publish 统一发布页`具有如下特征:
- 基于 `uni-app` & `uniCloud` 实现 - 基于 `uni-app` & `uniCloud` 实现
- 数据库设计遵循 [opendb 规范](https://gitee.com/dcloud/opendb) - 数据库设计遵循 [opendb 规范](opendb.md)
- 管理端遵循 [uni-admin 插件规范](/uniCloud/admin),可直接导入 `Admin` 项目中 - 管理端遵循 [uni-admin 插件规范](/uniCloud/admin),可直接导入 `Admin` 项目中
### 使用 ### 使用
......
...@@ -474,7 +474,7 @@ uni-starter ...@@ -474,7 +474,7 @@ uni-starter
│ │ | | └─uni-id uni-id模块配置目录 │ │ | | └─uni-id uni-id模块配置目录
│ │ | | ├─config.json uni-id对应的配置数据:微信登录、一键登录、短信验证码登录等key都在这里填写<a target="_blank" href="https://ext.dcloud.net.cn/plugin?id=4425">详情</a> │ │ | | ├─config.json uni-id对应的配置数据:微信登录、一键登录、短信验证码登录等key都在这里填写<a target="_blank" href="https://ext.dcloud.net.cn/plugin?id=4425">详情</a>
│ │ | | └─file.cert uni-id依赖的配置文件,假如你使用微信发红包功能,需要的证书文件就是放到这里 │ │ | | └─file.cert uni-id依赖的配置文件,假如你使用微信发红包功能,需要的证书文件就是放到这里
│ | | └───uni-id uni-id用户体系 <a target="_blank" href="https://uniapp.dcloud.io/uniCloud/uni-id">详情</a> │ | | └───uni-id uni-id用户体系 <a target="_blank" href="https://uniapp.dcloud.io/uniCloud/uni-id-summary">详情</a>
│ | ├─uni-analyse-searchhot 云端一体搜索模板依赖的云函数 <a target="_blank" href="https://ext.dcloud.net.cn/plugin?id=3851">详情</a> │ | ├─uni-analyse-searchhot 云端一体搜索模板依赖的云函数 <a target="_blank" href="https://ext.dcloud.net.cn/plugin?id=3851">详情</a>
│ | └─uni-id-cf 用户中心云函数,实现用户注册、修改密码、发送验证码、快捷登录(微信、短信、账户、一键登录) │ | └─uni-id-cf 用户中心云函数,实现用户注册、修改密码、发送验证码、快捷登录(微信、短信、账户、一键登录)
│ └──database 云数据目录 │ └──database 云数据目录
......
...@@ -148,7 +148,7 @@ const unipayIns = unipay.initAppleIapPayment({ ...@@ -148,7 +148,7 @@ const unipayIns = unipay.initAppleIapPayment({
| 参数名 | 类型 | 必填 | 默认值| 说明 | 支持平台 | | 参数名 | 类型 | 必填 | 默认值| 说明 | 支持平台 |
| :--------: | :----:| :--------------------------------: | :----:| :------------------------------------------------------------------------: | :----------------------:| | :--------: | :----:| :--------------------------------: | :----:| :------------------------------------------------------------------------: | :----------------------:|
| openid | String|支付宝小程序、微信小程序必填,App端支付不需要| - |通过对应 [uni-id](uniCloud/uni-id.md) 接口进行获取,服务商模式应使用子商户获取的openid | 支付宝小程序、微信小程序| | openid | String|支付宝小程序、微信小程序必填,App端支付不需要| - |通过对应 [uni-id](uni-id-summary.md) 接口进行获取,服务商模式应使用子商户获取的openid | 支付宝小程序、微信小程序|
| subject | String|支付宝支付必填,微信支付时忽略此项 | - |订单标题 | 支付宝支付 | | subject | String|支付宝支付必填,微信支付时忽略此项 | - |订单标题 | 支付宝支付 |
| body | String|微信支付必填 | - |商品描述 | 微信支付 | | body | String|微信支付必填 | - |商品描述 | 微信支付 |
| outTradeNo | String|必填 | - |商户订单号,有长度限制(微信支付为32字符以内,支付宝为64字符以内)、只能包含字母、数字、下划线;需保证在商户端不重复| | | outTradeNo | String|必填 | - |商户订单号,有长度限制(微信支付为32字符以内,支付宝为64字符以内)、只能包含字母、数字、下划线;需保证在商户端不重复| |
...@@ -215,13 +215,13 @@ uniCloud.callFunction({ ...@@ -215,13 +215,13 @@ uniCloud.callFunction({
name: 'getOrderInfo', name: 'getOrderInfo',
success(res) { success(res) {
uni.requestPayment({ uni.requestPayment({
// #ifdef APP // #ifdef APP-PLUS
provider: selectedProvider, // App端此参数必填,可以通过uni.getProvider获取 provider: selectedProvider, // App端此参数必填,可以通过uni.getProvider获取
// #endif // #endif
// #ifdef MP-WEIXIN // #ifdef MP-WEIXIN
...res.result.orderInfo, ...res.result.orderInfo,
// #endif // #endif
// #ifdef APP || MP-ALIPAY // #ifdef APP-PLUS || MP-ALIPAY
orderInfo: res.result.orderInfo, orderInfo: res.result.orderInfo,
// #endif // #endif
...res.result.orderInfo ...res.result.orderInfo
......
...@@ -22,10 +22,10 @@ uniCloud去掉了微信云开发的一些功能,添加了更多功能。以及 ...@@ -22,10 +22,10 @@ uniCloud去掉了微信云开发的一些功能,添加了更多功能。以及
|数据库查询语法 |MongoDB语法。学习门槛高、写法复杂,尤其联表查询很难用 |除了MongoDB语法外,支持JQL语法,大幅降低学习门槛,减少数据库操作的代码量,快速完成复杂查询 | |数据库查询语法 |MongoDB语法。学习门槛高、写法复杂,尤其联表查询很难用 |除了MongoDB语法外,支持JQL语法,大幅降低学习门槛,减少数据库操作的代码量,快速完成复杂查询 |
|开发工具 |微信小程序工具,编码体验欠佳 |通用编程工具HBuilderX,高效操作完善,插件体系开放 | |开发工具 |微信小程序工具,编码体验欠佳 |通用编程工具HBuilderX,高效操作完善,插件体系开放 |
|前端数据库watch |支持。权限按微信账户体系执行 |暂未集成。有需求可到需求墙投票:[http://dev.dcloud.net.cn/wish/](http://dev.dcloud.net.cn/wish/)。同时有插件可用于解决聊天场景,[详见](https://ext.dcloud.net.cn/search?q=im&cat1=7) | |前端数据库watch |支持。权限按微信账户体系执行 |暂未集成。有需求可到需求墙投票:[http://dev.dcloud.net.cn/wish/](http://dev.dcloud.net.cn/wish/)。同时有插件可用于解决聊天场景,[详见](https://ext.dcloud.net.cn/search?q=im&cat1=7) |
|opendb |无 |开放的数据库规范,众多价值,[详情](https://gitee.com/dcloud/opendb) | |opendb |无 |开放的数据库规范,众多价值,[详情](opendb.md) |
|账户服务 |仅微信登录 |[uni-id](https://uniapp.dcloud.io/uniCloud/uni-id)支持应用自己的账户体系,手机号或email,内置短信验证码和app端一键登录,支持微信、支付宝等三方登录,支持权限、角色、社交裂变等众多功能 | |账户服务 |仅微信登录,但鉴权更简单 |[uni-id](uni-id-summary.md)支持应用自己的账户体系,手机号或email,内置短信验证码和app端一键登录,支持微信、支付宝等三方登录,支持权限、角色、社交裂变等众多功能 |
|admin系统 |不自带 |自带开源[uniCloud admin](https://uniapp.dcloud.io/uniCloud/admin)系统,大小屏自适配,自带用户、角色、权限功能,还有更多[插件](https://ext.dcloud.net.cn/?cat1=7&cat2=74&orderBy=UpdatedDate)拿来即用 | |admin系统 |不自带 |自带开源[uniCloud admin](https://uniapp.dcloud.io/uniCloud/admin)系统,大小屏自适配,自带用户、角色、权限功能,还有更多[插件](https://ext.dcloud.net.cn/?cat1=7&cat2=74&orderBy=UpdatedDate)拿来即用 |
|支付 |仅微信支付 |[uniPay](https://uniapp.dcloud.io/uniCloud/unipay),跨端统一支付 | |支付 |仅微信支付,但鉴权更简单 |[uniPay](https://uniapp.dcloud.io/uniCloud/unipay),跨端统一支付 |
|cms |支持。但前端部分跨端不足 |支持。前端跨端、[管理端](https://ext.dcloud.net.cn/plugin?id=3543)开源 | |cms |支持。但前端部分跨端不足 |支持。前端跨端、[管理端](https://ext.dcloud.net.cn/plugin?id=3543)开源 |
|插件生态 |腾讯云开发了部分插件 |丰富的插件生态,包含腾讯云为uniCloud开发的插件,众多现成项目模块,[详情](https://ext.dcloud.net.cn/?cat1=7&orderBy=UpdatedDate) | |插件生态 |腾讯云开发了部分插件 |丰富的插件生态,包含腾讯云为uniCloud开发的插件,众多现成项目模块,[详情](https://ext.dcloud.net.cn/?cat1=7&orderBy=UpdatedDate) |
...@@ -41,7 +41,7 @@ uniCloud去掉了微信云开发的一些功能,添加了更多功能。以及 ...@@ -41,7 +41,7 @@ uniCloud去掉了微信云开发的一些功能,添加了更多功能。以及
#### 对接微信登录 #### 对接微信登录
uniCloud可以使用uni-id更简单的接入微信小程序登录。参考[uni-id微信登录](https://uniapp.dcloud.net.cn/uniCloud/uni-id?id=%e5%be%ae%e4%bf%a1%e7%99%bb%e5%bd%95) uniCloud可以使用uni-id更简单的接入微信小程序登录。参考[uni-id](uni-id-summary.md)
不同于微信云开发中的直接获取openid,uni-id提供的登录接口会在数据库的uni-id-users表内添加用户记录。 不同于微信云开发中的直接获取openid,uni-id提供的登录接口会在数据库的uni-id-users表内添加用户记录。
...@@ -256,4 +256,4 @@ uniCloud内也支持客户端操作数据库(下面成为clientDB),但是 ...@@ -256,4 +256,4 @@ uniCloud内也支持客户端操作数据库(下面成为clientDB),但是
- 数据校验能力,参考:[DB schema](https://uniapp.dcloud.net.cn/uniCloud/schema) - 数据校验能力,参考:[DB schema](https://uniapp.dcloud.net.cn/uniCloud/schema)
- 在数据库操作前/后执行额外操作,参考:[action](https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=action) - 在数据库操作前/后执行额外操作,参考:[action](https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=action)
- 更加简单的查询方式,参考:[JQL](https://uniapp.dcloud.net.cn/uniCloud/clientdb?id=jsquery) - 更加简单的查询方式,参考:[JQL](jql.md)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册