网站首页 > 技术文章 正文
微信小程序的云函数是一段运行在云端(服务器端)的代码,无需管理服务器,在开发工具内编写、一键上传部署即可运行后端代码。在物理设计上,一个云函数可由多个文件组成,占用一定量的 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-05-09 Vite 的实现原理,确实很巧妙(深入vite原理)
- 2025-05-09 详细讲解npm install命令执行,都干了哪些事情?
- 2025-05-09 如何在 Node.js 中使用 .env 文件管理环境变量 ?
- 2025-05-09 离线环境下运行Vue项目(离线安装vue-cli)
- 2025-05-09 《小鑫发现》之GraphQL框架Prisma
- 2025-05-09 如何写一个webpack插件(一)(webpack常用插件和loader)
- 2025-05-09 Node.js 是怎么找到模块的?(nodejs官方模块)
- 2025-05-09 将 node_modules 目录放入 Git 仓库的优点
- 2025-05-09 在Node.js中处理Zip文件(node.js zip)
- 2025-05-09 基于ES6,使用React、Webpack、Babel构建模块化JavaScript应用
- 05-09Linux 安装Oracle11.2.0.4 (静默安装法)
- 05-09Oracle 10g安装64位图解流程(Oracle 10g安装64位图解流程图怎么画)
- 05-09Centos7命令行安装Oracle11g(centos7安装oracle11g数据库)
- 05-09Vite 的实现原理,确实很巧妙(深入vite原理)
- 05-09微信小程序中使用云函数进行开发(微信小程序创建云函数)
- 05-09详细讲解npm install命令执行,都干了哪些事情?
- 05-09如何在 Node.js 中使用 .env 文件管理环境变量 ?
- 05-09离线环境下运行Vue项目(离线安装vue-cli)
- 最近发表
-
- Linux 安装Oracle11.2.0.4 (静默安装法)
- Oracle 10g安装64位图解流程(Oracle 10g安装64位图解流程图怎么画)
- Centos7命令行安装Oracle11g(centos7安装oracle11g数据库)
- Vite 的实现原理,确实很巧妙(深入vite原理)
- 微信小程序中使用云函数进行开发(微信小程序创建云函数)
- 详细讲解npm install命令执行,都干了哪些事情?
- 如何在 Node.js 中使用 .env 文件管理环境变量 ?
- 离线环境下运行Vue项目(离线安装vue-cli)
- 《小鑫发现》之GraphQL框架Prisma
- 如何写一个webpack插件(一)(webpack常用插件和loader)
- 标签列表
-
- cmd/c (64)
- c++中::是什么意思 (83)
- 标签用于 (65)
- 主键只能有一个吗 (66)
- c#console.writeline不显示 (75)
- js判断是否空对象 (63)
- pythoncase语句 (81)
- es6includes (73)
- sqlset (64)
- windowsscripthost (67)
- apt-getinstall-y (86)
- node_modules怎么生成 (76)
- localstorage.removeitem (74)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- js数组插入 (83)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- outofmemoryerror是什么意思 (64)
- eacces (67)
- 查看mysql是否启动 (70)
- 无效的列索引 (74)