【小程序】犀牛鸟云开发训练day8笔记
今日视频链接
记录遇到的问题
P1
配置云开发环境
从头开始设置云开发的方式
- 首先构建一个普通的不使用云的项目
- 然后在项目根目录创建一个miniprogram文件夹和一个cloudfunctions文件夹
- 把除了project.config.json和cloudfunctions文件夹的其他东西都扔到miniprogram文件夹里
- 在project.config.json里添加如下配置
"cloudfunctionRoot":"cloudfunctions/","miniprogramRoot":"miniprogram/"
- 在
app.js
里添加云环境初始化参数
if(!wx.cloud){console.log("cloud initialize error")}else{wx.cloud.init({env:"xly-t7lma",traceUser:true})}
这时候云函数文件夹会有一朵小云彩,如下,但我曾经有一次配置完成后没发现变成云彩,要么是文件名配置出错,实在没错就把项目删了重新建一个项目
编写云函数时配置云函数运行环境
cloud.init({env: cloud.DYNAMIC_CURRENT_ENV,
})
安装got库
直接在package.json里加一个"got": "9.2.2",
,然后npm install
就可以了
注意这里不能写"got": "latest"
,因为服务端的nodejs版本是8.9,会不兼容报错
删除云端函数
当本地写了一个函数然后上传之后,在云端把这个函数进行删除。再次上传这个函数会报错
这需要先同步云函数
然后就可以上传了
post实验报错
感觉这个跟网络有关,有时候能成功,
如下
有时候就失败,如下
需要配置
上传云函数报错
上传云函数遇到莫名错误信息,请帮忙看看
应该是腾讯服务器崩了,过会儿就好了
云函数依赖的包
经过实验可知
如果A函数依赖module M,B函数依赖module M,二者同时完整上传,那这两个包是相互独立互不干扰的。就是说即使A函数完整上传了Module M,B函数如果没有完整上传也是无法调用M包的。
但云端好像内置wx-server-sdk
,这个除外
P2
got包抽风,无法进行实验,摸爬滚打,用云调用解决了
security.msgSecCheck是服务器端API,服务器端API的定义在文档里的描述为
小程序还提供了一系列在后端服务器使用 HTTPS 请求调用的 API,帮助开发者在后台完成各类数据分析、管理和查询等操作。如 getAccessToken,code2Session 等。详细介绍请参考 API 文档。
请求参数说明
对于 GET 请求,请求参数应以 QueryString 的形式写在 URL 中。
对于 POST 请求,部分参数需以 QueryString 的形式写在 URL 中(一般只有 access_token,如有额外参数会在文档里的 URL 中体现),其他参数如无特殊说明均以 JSON 字符串格式写在 POST 请求的 body 中。
而对应的小程序端API指的就是小程序本身可以实现的API
而云调用,我个人理解就是在云函数里调用服务端API
云调用的配置方法
首先在云函数文件夹下面新建config.json
并填写如下内容,意思就是允许使用这个云调用接口
{"permissions": {"openapi": ["security.msgSecCheck"]}
}
然后查看这个接口的云调用方法
所以传入方法为
let checkResponse = await cloud.openapi.security.msgSecCheck({content: text});
console.log(checkResponse)
return checkResponse;
我一度纳闷传入的为啥是{...}
是个object,反正就记住吧
并且文档说了,云调用的情况下,文字部分正常会返回object,否则会抛出异常,所以要try catch
try{let checkResponse = await cloud.openapi.security.msgSecCheck({content: event.text});console.log(checkResponse)return checkResponse;}catch(err){return {'errCode':err.errCode,'errMsg':err.errMsg}}
如果有问题,返回的就如下所示
P3
小函数调用腾讯云SDK
各种找不着,各种对不上,非得去GitHub上找
先是找腾讯云的秘钥
然后找image-node-sdk
文档 链接
const fs = require('fs');
const path = require('path');
const {ImageClient
} = require('image-node-sdk');let AppId = ''; // 腾讯云 AppId
let SecretId = ''; // 腾讯云 SecretId
let SecretKey = ''; // 腾讯云 SecretKeylet imgClient = new ImageClient({ AppId, SecretId, SecretKey });
imgClient.ocrIdCard({formData: {card_type: 0,image: fs.createReadStream(path.join(__dirname, './idcard.jpg'))},headers: {'content-type': 'multipart/form-data'}
}).then((result) => {console.log(result.body)
}).catch((e) => {console.log(e);
});
其中__dirname
代表的是本文件所在的路径
P4
tcb-router
版本如下
"dependencies": {"tcb-router": "1.1.2","wx-server-sdk": "latest"}
视频中老师说,如果当前作用域里没有对应的变量,会到上一个作用域里寻找,例如下面的event,这让我想起了this
,也就是说箭头函数不会覆盖this
变量,但其他函数会覆盖,所以导致了他指向的对象发生了改变
exports.main = async (event, context) => {const app=new TcbRouter({event});app.user(async(ctx,next)=>{ctx.data={};ctx.data.openId=event.userInfo.openId})return }
实验跑通了,讲一下这一章讲的是什么意思吧
由于每个小程序的对应的单个云环境只允许有20个云函数,那如何希望有多个函数呢,要使用TCBROUTER
// 云函数入口文件
const cloud = require('wx-server-sdk')
const TcbRouter = require('tcb-router')
cloud.init({env: cloud.DYNAMIC_CURRENT_EVN
})// 云函数入口函数
exports.main = async(event, context) => {const app = new TcbRouter({event});app.use(async(ctx, next) => {// 这个是全局中间件,所有调用都要走这个函数console.log("进入全局的中间件")ctx.data = {};ctx.data.openId = event.userInfo.openId;await next();})app.router(['user','school'],async(ctx,next)=>{// 这个是数组中间件,如果调用了数组中提到的url,那么这个函数就要执行console.log("arrs middleware");ctx.data.from='小程序云函数实战';await next();})app.router('user',async(ctx,next)=>{// 这个是单个的中间件,如果调用了user,那么就会执行这个函数ctx.data.name="zxy";ctx.data.role='developer';await next();//这个next函数指的就是下面的这个async(ctx)函数,这一句话代表着要执行下面这个函数},async(ctx)=>{// 这个里面没有next,因为这是最后一个函数了,后续没有其他函数了ctx.data.nickname='dom';ctx.body={code:0,data:ctx.data};})app.router('school', async (ctx, next) => {ctx.data.name = "txcloud acdamic";ctx.data.url = 'cloud.tencent.com';await next();}, async (ctx) => {ctx.data.nickname = '学院sama';ctx.body = { code: 0, data: ctx.data };})return app.serve();
}
本地调用云函数如下,假如说要调用user了,那么云函数的执行逻辑就是:1.先执行app.use
这个全局路由。2.然后当执行到await next()
的时候,意思就是要执行下一个路由了。3.由于请求的url是user,因此要进入那个数组路由,所以全局路由里的await next()
就是在执行数组路由。4.之后以此类推
最终返回的实际上就是那个app.serve
返回的就是ctx对象
user:function(res){console.log("call user")wx.cloud.callFunction({// 要调用的云函数名称name: "tcbRouter",// 传递给云函数的参数data: {$url: "user", // 要调用的路由的路径,传入准确路径或者通配符*}}).then(res => {console.log(res)})},school: function (res) {console.log("call school");wx.cloud.callFunction({// 要调用的云函数名称name: "tcbRouter",// 传递给云函数的参数data: {$url: "school", // 要调用的路由的路径,传入准确路径或者通配符*}}).then(res=>{console.log(res)})},
按这种方式,我们就可以在一个router云函数里,通过提交不同的url申请,去执行不同的的函数了
临时复习,点击按钮传入数据怎么做
<button bindtap="school" data-aaa="aaa">school</button>
然后再dataset
里找
P5
微信小程序的模板功能升级为订阅信息功能
小程序订阅消息
同样,视频里使用的是GOT包,而这个包调用服务端API会报错,所以我改为云调用
下面是申请订阅信息权限的绑定函数,这个requestSubscribeMessage
只能通过点击发起,用户通过点击允许发送订阅信息一次,小程序就能回复一次订阅信息,如果只允许了1次,并且已经发送一次订阅信息了,再次就不能发送了。
getSubscript:function(event){console.log('getSubscript')wx.requestSubscribeMessage({tmplIds: ['dPgbXjkXrHATlYcPFGc3EA7LpkEnuPD26rkhPctqI0c'],success: res => {console.log(res)},fail: res => {console.log(res)}})},
//config.json
{"permissions": {"openapi": ["subscribeMessage.send"]}
}
exports.main = async(event, context) => {try {console.log(cloud.getWXContext().OPENID)const result = await cloud.openapi.subscribeMessage.send({touser: cloud.getWXContext().OPENID, // 通过 getWXContext 获取 OPENIDtemplateId: 'dPgbXjkXrHATlYcPFGc3EA7LpkEnuPD26rkhPctqI0c',// page: 'pages/index',data: {thing1: {value: '测试签到'},number3: {value: 47},time5: {value: '2015年01月05日 12:30'},phrase6: {value: '活动'}},emphasisKeyword: 'phrase6.DATA',miniprogramState: 'developer'})// result 结构// { errCode: 0, errMsg: 'openapi.templateMessage.send:ok' }return result} catch (err) {// 错误处理// err.errCode !== 0return {errcode:err.errCode}}
}
手机上可以看到
P6
wx.cloud.init({traceUser:true})
就代表着云开发自动会接入用户认证部分
【小程序】犀牛鸟云开发训练day8笔记相关推荐
- 【小程序】犀牛鸟云开发训练day9
今日视频链接1 今日视频链接2 视频1 P1 视频1 P2 视频1 P3 云存储用来存储图片 云数据库用来存储用户的一些数据以及图片路径之类的 云函数用来处理小程序端无法完成的逻辑 openid是当前 ...
- 【小程序】犀牛鸟云开发训练day10
视频1 视频2 视频1 P1和P2就是把同一件事儿讲了两边,我现在想复现一下这个网盘功能 问题: 下面代码的意义是? 这个方法会在app.launch执行获取用户数据成功后在onlaunch函数里调用 ...
- 腾讯犀牛鸟云开发新生工程教育百校同行计划全面启动
编者按: 2020年12月在 2020 Tehco Park 开发者大会上,腾讯云宣布将在原腾讯犀牛鸟云开发人才培养计划基础上,进一步响应信息技术新工科产学研联盟(简称:新工科联盟)号召,与新工科联盟 ...
- 正式启动|2020腾讯犀牛鸟云开发校园技术布道师养成计划
为顺应信息技术行业发展趋势及人才需求,促进新时代云计算领域人才培养,在信息技术新工科产学研联盟的指导下,由腾讯云.腾讯高校合作和图灵教育联合主办,牛客网协办的2020腾讯犀牛鸟云开发校园技术布道师养成 ...
- 获奖结果公布|2020腾讯犀牛鸟云开发校园技术布道师养成计划
导语: 为顺应信息技术行业发展趋势及人才需求,促进新时代云计算领域人才培养,在信息技术新工科产学研联盟的指导下,由腾讯云.腾讯高校合作和图灵教育联合主办,牛客网协办的2020腾讯犀牛鸟云开发校园技术布 ...
- 微信小程序:uni-app云开发的网盘助手
这是一款uni-app开发的一款网盘小助手小程序源码 该源码主要用于用户输入关键词然后全网抓取百度网盘资源内容 另外呢该小程序还可以免费领取百度网盘七天会员,所以用来引流特别的不错 该小程序还有外卖系 ...
- 2022全新恶搞放屁小程序源码(云开发)
全新恶搞放屁小程序源码,恶搞类微信小程序源码.免服务器,直接上传即可. 小程序源码下载地址: 2022全新恶搞放屁小程序源码(云开发)-小程序文档类资源-CSDN下载全新恶搞放屁小程序源码,恶搞类微信 ...
- 微信小程序中配置云开发
微信小程序中配置云开发 一.配置 app.js 文件 onLaunch() {wx.cloud.init({env: 'cloud1-xxxxxxxxxx', // 云开发 环境IDtraceUser ...
- 微信小程序环境共享,多个小程序共享一个云开发数据库
我们在做小程序开发时,有时候需要多个小程序公用一个数据库,比如我们做一个外卖小程序,要配套一个骑手小程序,这个时候就要两个小程序公用一个云开发环境,公用一个数据库了.所以今天来教下大家如何多个小程序共 ...
最新文章
- 2022-2028年中国铅锌精矿粉行业市场研究及前瞻分析报告
- 【C/C++应用实例】基于线性结构的1KB内存IC存储模拟展示(C/C++)
- 错误处理:RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be
- Active MQ的安装
- 301重定向IIS设置,及伪静态后 301重定向出错案例分享
- 织梦dedecms转WordPress方法(脚本一键转换)
- CentOS 谢幕,Anolis OS 带来无限可能的未来
- linux 安卓svn,linux安装svn
- 用C语言进行完数的判断(for循环和数组思想)
- python规模_基于python的百度迁徙2——迁徙规模指数(附代码)
- 【MapGIS必备】常见问题处理(第十四期)
- JAVA验证身份证号码校验码是否正确
- 【3D目标检测】PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud
- LeetCode Task04 数组数组二分查找 0704二分查找 0069Sqrt(x)
- 学习案例:北京房价走势分析
- 今日学习在线编程题:弓形半径
- Xcode (xip)官方原版下载 Xcode 所有历史版本(转载)
- Linux 系统下各种包的安装方法
- Python全栈笔记(练习题,持续更新)
- 利物浦大学计算机qs排名,利物浦大学qs世界排名
热门文章
- FIDES.DV-Partner.Suite.2015.050 1DVD
- W3schools——一个学习 HTML,CSS 和 Javascript 的好网站
- 音乐播放器源代码(免费复制)
- 详解RTK、RTD、SBAS、WAAS、PPP、PPK广域差分等技术之间的关系与区别。
- sp3485推荐电路(转)
- 【光学】基于matlab模拟涡旋光与球面波的干涉含Matlab源码
- 计算机技术与软件专业技术资格 高级程序员,计算机技术与软件专业技术资格名称及岗位基本任职条件...
- 6亿人均月收入1000元,月入3千就是高收入?如何增加收入?
- 妙招更改iTunes备份地址释放C盘空间
- JZOJ 3908 吴传之火烧连营