今日视频链接

记录遇到的问题

P1

配置云开发环境

从头开始设置云开发的方式

  1. 首先构建一个普通的不使用云的项目
  2. 然后在项目根目录创建一个miniprogram文件夹和一个cloudfunctions文件夹
  3. 把除了project.config.json和cloudfunctions文件夹的其他东西都扔到miniprogram文件夹里
  4. 在project.config.json里添加如下配置"cloudfunctionRoot":"cloudfunctions/","miniprogramRoot":"miniprogram/"
  5. 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笔记相关推荐

  1. 【小程序】犀牛鸟云开发训练day9

    今日视频链接1 今日视频链接2 视频1 P1 视频1 P2 视频1 P3 云存储用来存储图片 云数据库用来存储用户的一些数据以及图片路径之类的 云函数用来处理小程序端无法完成的逻辑 openid是当前 ...

  2. 【小程序】犀牛鸟云开发训练day10

    视频1 视频2 视频1 P1和P2就是把同一件事儿讲了两边,我现在想复现一下这个网盘功能 问题: 下面代码的意义是? 这个方法会在app.launch执行获取用户数据成功后在onlaunch函数里调用 ...

  3. 腾讯犀牛鸟云开发新生工程教育百校同行计划全面启动

    编者按: 2020年12月在 2020 Tehco Park 开发者大会上,腾讯云宣布将在原腾讯犀牛鸟云开发人才培养计划基础上,进一步响应信息技术新工科产学研联盟(简称:新工科联盟)号召,与新工科联盟 ...

  4. 正式启动|2020腾讯犀牛鸟云开发校园技术布道师养成计划

    为顺应信息技术行业发展趋势及人才需求,促进新时代云计算领域人才培养,在信息技术新工科产学研联盟的指导下,由腾讯云.腾讯高校合作和图灵教育联合主办,牛客网协办的2020腾讯犀牛鸟云开发校园技术布道师养成 ...

  5. 获奖结果公布|2020腾讯犀牛鸟云开发校园技术布道师养成计划

    导语: 为顺应信息技术行业发展趋势及人才需求,促进新时代云计算领域人才培养,在信息技术新工科产学研联盟的指导下,由腾讯云.腾讯高校合作和图灵教育联合主办,牛客网协办的2020腾讯犀牛鸟云开发校园技术布 ...

  6. 微信小程序:uni-app云开发的网盘助手

    这是一款uni-app开发的一款网盘小助手小程序源码 该源码主要用于用户输入关键词然后全网抓取百度网盘资源内容 另外呢该小程序还可以免费领取百度网盘七天会员,所以用来引流特别的不错 该小程序还有外卖系 ...

  7. 2022全新恶搞放屁小程序源码(云开发)

    全新恶搞放屁小程序源码,恶搞类微信小程序源码.免服务器,直接上传即可. 小程序源码下载地址: 2022全新恶搞放屁小程序源码(云开发)-小程序文档类资源-CSDN下载全新恶搞放屁小程序源码,恶搞类微信 ...

  8. 微信小程序中配置云开发

    微信小程序中配置云开发 一.配置 app.js 文件 onLaunch() {wx.cloud.init({env: 'cloud1-xxxxxxxxxx', // 云开发 环境IDtraceUser ...

  9. 微信小程序环境共享,多个小程序共享一个云开发数据库

    我们在做小程序开发时,有时候需要多个小程序公用一个数据库,比如我们做一个外卖小程序,要配套一个骑手小程序,这个时候就要两个小程序公用一个云开发环境,公用一个数据库了.所以今天来教下大家如何多个小程序共 ...

最新文章

  1. 2022-2028年中国铅锌精矿粉行业市场研究及前瞻分析报告
  2. 【C/C++应用实例】基于线性结构的1KB内存IC存储模拟展示(C/C++)
  3. 错误处理:RuntimeError: Input type (torch.cuda.FloatTensor) and weight type (torch.FloatTensor) should be
  4. Active MQ的安装
  5. 301重定向IIS设置,及伪静态后 301重定向出错案例分享
  6. 织梦dedecms转WordPress方法(脚本一键转换)
  7. CentOS 谢幕,Anolis OS 带来无限可能的未来
  8. linux 安卓svn,linux安装svn
  9. 用C语言进行完数的判断(for循环和数组思想)
  10. python规模_基于python的百度迁徙2——迁徙规模指数(附代码)
  11. 【MapGIS必备】常见问题处理(第十四期)
  12. JAVA验证身份证号码校验码是否正确
  13. 【3D目标检测】PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud
  14. LeetCode Task04 数组数组二分查找 0704二分查找 0069Sqrt(x)
  15. 学习案例:北京房价走势分析
  16. 今日学习在线编程题:弓形半径
  17. Xcode (xip)官方原版下载 Xcode 所有历史版本(转载)
  18. Linux 系统下各种包的安装方法
  19. Python全栈笔记(练习题,持续更新)
  20. 利物浦大学计算机qs排名,利物浦大学qs世界排名

热门文章

  1. FIDES.DV-Partner.Suite.2015.050 1DVD
  2. W3schools——一个学习 HTML,CSS 和 Javascript 的好网站
  3. 音乐播放器源代码(免费复制)
  4. 详解RTK、RTD、SBAS、WAAS、PPP、PPK广域差分等技术之间的关系与区别。
  5. sp3485推荐电路(转)
  6. 【光学】基于matlab模拟涡旋光与球面波的干涉含Matlab源码
  7. 计算机技术与软件专业技术资格 高级程序员,计算机技术与软件专业技术资格名称及岗位基本任职条件...
  8. 6亿人均月收入1000元,月入3千就是高收入?如何增加收入?
  9. 妙招更改iTunes备份地址释放C盘空间
  10. JZOJ 3908 吴传之火烧连营