什么是云开发

微信小程序云开发是腾讯提供的小程序后端一体化方案:不需要自己买服务器、配域名、备案,直接在小程序里使用:

  • 云数据库:文档型数据库(类似 MongoDB)
  • 云存储:文件上传/下载,带 CDN
  • 云函数:运行 Node.js 代码,处理业务逻辑

适合个人开发者和小型项目快速上线。

一、开通云开发环境

  1. 微信开发者工具中,点工具栏”云开发”按钮;
  2. 首次使用按提示开通,创建环境(建议按 环境名-测试/生产 区分);
  3. 项目根目录的 app.js 里初始化:
1
2
3
4
5
6
7
8
9
10
11
12
13
// app.js
App({
onLaunch() {
if (!wx.cloud) {
console.error('请使用 2.2.3 以上基础库')
return
}
wx.cloud.init({
env: 'your-env-id', // 环境 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) => {
// 云函数里能拿到调用者的 openid(用户唯一标识)
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) => {
// up.fileID 就是云端文件 ID,可直接存数据库
console.log(up.fileID)
}
})
}
})

前端展示用 fileID 即可:

1
<image src="{{user.avatar}}" />

fileID 会自动带上临时鉴权,直接可用,不需要再转 https 链接。

五、云开发实战注意事项

  1. 环境 ID 别写错:wx.cloud.init 的 env 要和控制台一致,否则报”环境不存在”;
  2. 云函数更新要重新部署:修改云函数后右键”上传并部署:云端安装依赖”;
  3. 数据库默认 20 条上限:get() 一次最多返回 20 条,分页用 skip + limit(云函数里最多 100 条);
  4. 查询权限:涉及用户隐私的集合保持默认权限,公开内容调高权限并注意敏感字段;
  5. 冷启动:云函数首次调用有 1-2 秒冷启动,高频请求建议前端先本地缓存。

总结

云开发的套路很固定:简单的 CRUD 用前端直连数据库,涉及权限、校验、聚合的逻辑用云函数,图片文件走云存储。个人项目从云开发起步,可以省掉整个服务端运维成本,把精力放在业务上。