网站首页 > 技术文章 正文
微信小程序的云函数是一段运行在云端(服务器端)的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。在物理设计上,一个云函数可由多个文件组成,占用一定量的 CPU 内存等计算资源,各云函数完全独立;可分别部署在不同的地区。
小程序内提供了专门用于云函数调用的 API。开发者可以在云函数内使用 wx-server-sdk 提供的 getWXContext 方法获取到每次调用的上下文(appid、openid 等),无需维护复杂的鉴权机制,即可获取天然可信任的用户登录态(openid)。只需编写函数代码并部署到云端即可在小程序端调用,同时云函数之间也可互相调用。
一个云函数的写法与一个在本地定义的 JavaScript 方法无异,代码运行在云端 Node.js 中。当云函数被小程序端调用时,定义的代码会被放在 Node.js 运行环境中执行。
1、第一步
在项目根目录找到 project.config.json 文件,新增 cloudfunctionRoot 字段,指定本地已存在的目录作为云函数的本地根目录。
"cloudfunctionTemplateRoot": "cloudfunctionTemplate",
"cloudfunctionRoot": "./functions/",
设置完成之后,查看资源管理器,指定的目录已经变成云函数的目录。yydc是我项目云函数环境的名字。
2、选中云函数目录,右键菜单点击“新建Node.js云函数”,输入想创建的云函数的名字,自动创建云函数目录。系统会同时创建config.json,index.js,package.json这三个文件。
其中index.js是云函数实体文件。
我在测试过程中发现,有 wx-server-sdk 创建失败的情况,修改package.json 中依赖设置为:latest即可解决。
"dependencies": {
"wx-server-sdk": "latest"
}
3、编辑云函数文件,写个简单HelloWorld
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
return {
say: "hello world!"
}
/* return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
} */
}
4、上传云函数
选中我们写好的云函数目录,右键点击菜单“上传并部署:云端安装依赖(不上传node_modules)”,上传我们写好的云函数到云端。
注意:刚开始我忘了上传,导致云函数访问不正常,一直执行默认生成的代码。
5、测试云函数
打开云开发控制台,选中左上方“云函数”按钮,可以查看我们定义的所有云函数。
点击右侧“云端测试”链接
在右侧窗口输入云函数的输入参数(以json串的形式),点击下方“运行测试”按钮,运行云函数进行测试。
运行测试完成后下方会出现云函数执行情况
可以取日志列表,查看调用日志信息。
6、小程序中使用云函数
在小程序中编写调用代码
callCloldFunction:function(){
wx.cloud.callFunction({
// 云函数名称
name: 'loadAdd',
// 传给云函数的参数
data: {
word: 'this'
},
success: function(res) {
console.log(res.result) // 3
},
fail: console.error
})
},
调用并返回:
最后说下费用问题,云函数本身提供一些免费调用次数,超过是要收费的。而且在云函数中访问外部资源是没有免费额度的。最重要的一点“后付费”,使用的千万注意,千万不要因为访问量过大造成巨额损失。
其实,个人总体感觉这个云函数有点鸡肋,不如自己弄个服务器写后台,折腾云函数各种限制,又收费,实在没有使用必要。
猜你喜欢
- 2025-08-01 基于Springboot + vue实现的社团管理系统
- 2025-08-01 前端开发如何用Mock.js进行数据接口模拟
- 2025-08-01 使用vite为vue项目配置@别名
- 2025-08-01 基于Springboot + vue3实现的教务管理系统
- 2025-08-01 gulp前端自动化构建入门指南(一)
- 2025-08-01 快速搭建页面:一款开源可视化拖拽工具
- 2025-08-01 深入 npm 模块安装机制
- 2025-08-01 【推荐】一个基于 Vue 开源的可视化页面生成工具,前端开发利器
- 2025-08-01 告别node_modules黑洞:团队迁移pnpm节省50G磁盘空间实战指南
- 2025-08-01 告别node_modules黑洞!pnpm凭什么吊打npm和yarn?
- 08-06中等生如何学好初二数学函数篇
- 08-06C#构造函数
- 08-06初中数学:一次函数学习要点和方法
- 08-06仓颉编程语言基础-数据类型—结构类型
- 08-06C++实现委托机制
- 08-06初中VS高中三角函数:从"固定镜头"到"360°全景",数学视野升级
- 08-06一文讲透PLC中Static和Temp变量的区别
- 08-06类三剑客:一招修改所有对象!类方法与静态方法的核心区别!
- 1524℃桌面软件开发新体验!用 Blazor Hybrid 打造简洁高效的视频处理工具
- 663℃Dify工具使用全场景:dify-sandbox沙盒的原理(源码篇·第2期)
- 530℃MySQL service启动脚本浅析(r12笔记第59天)
- 494℃启用MySQL查询缓存(mysql8.0查询缓存)
- 493℃服务器异常重启,导致mysql启动失败,问题解决过程记录
- 481℃「赵强老师」MySQL的闪回(赵强iso是哪个大学毕业的)
- 463℃mysql服务怎么启动和关闭?(mysql服务怎么启动和关闭)
- 461℃MySQL server PID file could not be found!失败
- 最近发表
- 标签列表
-
- cmd/c (90)
- c++中::是什么意思 (84)
- 标签用于 (71)
- 主键只能有一个吗 (77)
- c#console.writeline不显示 (95)
- pythoncase语句 (88)
- es6includes (74)
- sqlset (76)
- windowsscripthost (69)
- apt-getinstall-y (100)
- node_modules怎么生成 (87)
- chromepost (71)
- flexdirection (73)
- c++int转char (80)
- mysqlany_value (79)
- static函数和普通函数 (84)
- el-date-picker开始日期早于结束日期 (70)
- asynccallback (71)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- java (73)
- js数组插入 (83)
- mac安装java (72)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)