什么是云开发
微信小程序云开发是腾讯提供的小程序后端一体化方案:不需要自己买服务器、配域名、备案,直接在小程序里使用:
- 云数据库:文档型数据库(类似 MongoDB)
- 云存储:文件上传/下载,带 CDN
- 云函数:运行 Node.js 代码,处理业务逻辑
适合个人开发者和小型项目快速上线。
一、开通云开发环境
- 微信开发者工具中,点工具栏”云开发”按钮;
- 首次使用按提示开通,创建环境(建议按
环境名-测试/生产 区分);
- 项目根目录的
app.js 里初始化:
1 2 3 4 5 6 7 8 9 10 11 12 13
| App({ onLaunch() { if (!wx.cloud) { console.error('请使用 2.2.3 以上基础库') return } wx.cloud.init({ env: 'your-env-id', traceUser: true }) } })
|
二、云数据库:CRUD
数据库是文档型(JSON),一个”集合”对应一张表,一条”记录”对应一行。
前端直接读写(简单场景):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| const db = wx.cloud.database()
db.collection('todos').add({ data: { title: '学习云开发', done: false, createTime: db.serverDate() } })
db.collection('todos') .where({ done: false }) .orderBy('createTime', 'desc') .limit(20) .get() .then((res) => console.log(res.data))
db.collection('todos').doc('记录id').update({ data: { done: true } })
db.collection('todos').doc('记录id').remove()
|
权限注意:云数据库默认权限是”仅创建者可读写”。想让所有用户都能读(如文章列表),去控制台把集合权限改为”所有用户可读,仅创建者可读写”。
三、云函数:把敏感逻辑放后端
前端直接操作数据库有安全隐患(比如不能限制字段、不能做复杂校验)。敏感逻辑(金额、密钥、聚合统计)必须放云函数。
创建云函数:在项目 cloudfunctions/ 目录右键 → 新建 Node.js 云函数,如 login。
云函数代码(cloudfunctions/login/index.js):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| const cloud = require('wx-server-sdk') cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
exports.main = async (event, context) => { const { OPENID } = cloud.getWXContext()
const db = cloud.database() const users = db.collection('users')
const res = await users.where({ _openid: OPENID }).get()
if (res.data.length === 0) { await users.add({ data: { _openid: OPENID, nickname: event.nickname || '微信用户', createdAt: db.serverDate() } }) }
return { openid: OPENID } }
|
前端调用云函数:
1 2 3 4 5 6
| wx.cloud.callFunction({ name: 'login', data: { nickname: '张三' } }).then((res) => { console.log('登录结果:', res.result) })
|
云函数每次调用按资源用量计费(有免费额度),这也是把逻辑放云函数要控制调用频率的原因。
四、云存储:上传图片
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| wx.chooseMedia({ count: 1, mediaType: ['image'], success: (res) => { const filePath = res.tempFiles[0].tempFilePath const cloudPath = `avatar/${Date.now()}.png`
wx.cloud.uploadFile({ cloudPath, filePath, success: (up) => { console.log(up.fileID) } }) } })
|
前端展示用 fileID 即可:
1
| <image src="{{user.avatar}}" />
|
fileID 会自动带上临时鉴权,直接可用,不需要再转 https 链接。
五、云开发实战注意事项
- 环境 ID 别写错:
wx.cloud.init 的 env 要和控制台一致,否则报”环境不存在”;
- 云函数更新要重新部署:修改云函数后右键”上传并部署:云端安装依赖”;
- 数据库默认 20 条上限:
get() 一次最多返回 20 条,分页用 skip + limit(云函数里最多 100 条);
- 查询权限:涉及用户隐私的集合保持默认权限,公开内容调高权限并注意敏感字段;
- 冷启动:云函数首次调用有 1-2 秒冷启动,高频请求建议前端先本地缓存。
总结
云开发的套路很固定:简单的 CRUD 用前端直连数据库,涉及权限、校验、聚合的逻辑用云函数,图片文件走云存储。个人项目从云开发起步,可以省掉整个服务端运维成本,把精力放在业务上。