开发者学堂课程【小程序云开发速成:小程序云开通和入门(二)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/300/detail/3504
小程序云开通和入门(二)
关于代码里面使用的一个情况。可以看到用两种的云调用的方式,一种是在小程序端直接调用,需要引入阿里sv sdk依赖,然后引入之后通过数始的的话,可以再使用到嗯开放接口的任何地方,这个地方用到小程序二维码,这样一个开放接口能力。以前要使用支付宝的各种开放接口,需要在后端通过呃后端的开发接入支付宝的sdk。然后再把sdk封装成前端小程序可以调用一些请求,通过云调用完全不需要后端做任何的开发,直接通过在小程序端,通过对应的云调用的S D,就可以发起云调用的请求。可以看一下,在做云调用之前需要做一些什么事情,第一就是引入对应的sdk,在小程序端,第二,要清楚要调到哪一个开放能力,需要在对应的小程序的应用下面去添加对应的功能包,比如现在调用的是小程序二维码,那就需要在能力弹窗里面找到对应的小程序二维码的功能,然后进行添加,完成之后就意味着小程序有了对应功能的调用权限,就可以直接在小程序端,通过 sdk 的方式进行调用地方。
1.在小程序页面使用云数据库
const model=
userId:2088000001,
userName:
count:0,
signTime:formatTime(new Date()),
} ;
if
(newData.length >0){
model.count newData[0].count +1:
}
try
{
/ /
.test-
const res=await
my.serverless.db.collection('test).insertOne(model);
const result res.result l
2.在云函数端使用云数据库
module.exports async function (ctx){
return await ctx.mpserverless.db.collection('test).findOne({
userName:ctx.args.name
});
/ / 新增数据
async onAdd()
my.showLoading({
content:
}
);
const newData,current }this.data;
const model
=
{
useId:2088000001,
userName:'B,
count:0,
signTime:formatTime(new Date()),
}
;
if
(newData.length >0)
model.count newData[o].count l;
try
{
/ / 1.向云数据库的 test 数据标记和插入一条记录
const res await my.serverless.db.collection('test).insertone(model);
const result res.result |l {h:
/ /如果插入成功
if (res.affectedDocs >0 &result.insertedId){
/ / 2.查询云数据的 test 数据表集合的所有记录
const insertData await my.serverless.db.collection('test).find({
_
id:result.insertedId
const insertResult insertData.result Il 0;
this.setData
(
{
newData:insertResult,
stepConfig:this.getNewstepConfig(this.data),
}
)
;
}
catch (e)
{
log.
error
(
‘
新增数据异常‘,e);
/ / 更新数据
async onUpdate()
my.showLoading({
content:
}
)
;
try
const sortedData await this.getlastData();
if (sortedData.length >0){
const originData sortedDatalol;
this.setData({
originData,
}
)
;
const updateone =
..originData,
count:1,
}
;
/
/ / 4.更新云数据的数据库表 test 的一条数据
const updateRes await my.serverless.db.collection('test).upda
{
id:originData._id
},{$set:{
count:I
}
)
;
if (updateRes.affectedDocs >
0
)
{
this.setDatal{
updatedData:originNewRes.result[ol,
){
J({
删除记录中,
dData await this.getlastData();
3ta.length >0)
rent sortedData[ol;
数据的数据表集合 test 的一条数据
await my.serverless.db.collection('test).deleteOne({_id:current._id
res);
ffectedDocs >0){
Toast({
'success',
it:'I,
tData({
edData:current,
onfig:this.getNewStepConfig(this.data),
//删除数据
async onDelete()
my.showLoading (
content:
}
)
;
try
{
const sortedData await this.getlastData();
if (sortedData.length >0){
const current sortedDatalol;
/ / 4.删除云数据的的数据表集合 test 的一条数据
const res await my.serverless,db.collection('test).deleteone(
log.info(res);
if (res.affectedDocs >0)
{
my.showToast({
type:'success,
content:
}
)
;
this.setDatal{
deletedData:current,
stepConfig:this.getNewStepConfig(this.data),
}
)
;
}
log.
warn
(‘
删除未成功,返回数据为:’,res
)
;
async handleTry()
my.showLoading({
content:'
}
)
;
try
{
const res await my.serverless.function.invoke('datab,
name:'
}
)
;
/ / 第一次可以看一下控制台打印完整的响应数据
log.info(res);
if (res.success)
{
this.setDatal{
sum:res.result.userId,
}
)
;
}
else
{
my.showToast({
type:'
fail
',
content
:
‘
请求失败
’
,
}
)
;
}
catch (e)
{
log.error('
云函数异常
'
,
e)
;
}
my.hideLoading
(
)
;
onLoad(),
async handleTry(){
my.showLoading({
content:
}
)
;
try
{
六、使用云函数
云函数里可以直接通过 API 调用数据存储,文件存储的服务资源以及其他云函数
1、当云函数被客户端或者其他云函数调用时,可以通过 ctx.args 获得调用传来的参数
2、可以通过 ctx.logger 方法打印不同类型的日志信息,然后在云函数控制台中查看执行日志。
3、在云函数内通过 ctx.env 来获取环境参数,例如 Spaceld、调用来源、客户端源 IP 和客户端
UserAgent 等信息。ctx.env 是一个 object,它包含 MP_SPACE_ID(Spaceld),MP_SOURCE(调用来源),MP_USER AGENT(客户端 User-agent),MP_CLIENTIP(客户端 IP)。
4、在云函数中,您可以直接调用同一环境(空间)的数据存储和文件存储服务以及获取当前请求用户的基本信息。ctx.mpserverless 在云函数封装了小程序的基础服务,API 使用方式和客户端一致。
通过 ctx.mpserverless.db 调用云数据库能力,
如 ctx.mpserverless.db.collection(user).find(uid:
args.uid1)。
·通过 ctx.mpserverless.file 调用文件存储能力,
如 ctx.mpserverless.filedeleteFileargs.filePathUrl)
·通过 ctx.mpserverless.user 获取当前访问用户基本信息,
如 ctx.mpserverless.user.getinfo0。
·通过 ctx.mpserverless.function 调用云函数能力,
如 mpserverless.function.invoke(dataAnalytics
frange:30 调用其他云函数
·通过 ctx.httpclientHTTP 请求方法,无需额外依赖,您就可以请求任何 HTTP 和 HTTPS 协议的 Web 服务。
七、使用云调用
在小程序端和云函数中一行代码使用支付宝的基础能力、营销能力、会员能力、支付能力、安全能力和资金能力等各种开放能力接口
/ / 1.在小程序端直接调用,集成 alipay-serverless-sdk SDK
const res avait cloud.base.grcode.create(
'pages/cloud/cloud'.
'key=value',
'我是二维码描述,
/ / 2. 在云函数端调用,更加方便灵活,不用依赖 SDK
/
/
const res await my.serverless,function,invoke('serviceCall',
/
/
query:'a=b'
/
/
}
)
;
console.info('--res--,res);
this.setDatal{
q
rCodeUrl:res.grCodeUrl,
/
/
q
rCodeUrl:res.result.grCodeUrl
}
)
;
}
catch (e)
{
my.showToast({
content:e.message '
} ) ;
调用设计里面包含了在云函数端如何方便的调用以及在小程序端如何调用。
首先,在小程序段的调用代码就是通过引用 sdk,直接通过这一行代码也可以调到二维码。从小程序端发起调用去二维码的请求已经成功地返回。第二种比较推荐,就是在云函数端去调,首先拼建一个云函数。在云函数端的调动其实非常方便,直接通过注入到上下文参数的 cloud 的设备对象。
实例对象提供出来的api,就可以直接调到各种的开放能力。