微信小程序云开发
FreeGuideOnline
8阅读
2026-07-13
javascript // 初始化数据库实例 const db = wx.cloud.database() // 向 todos 集合添加一条记录 db.collection('todos').add({ data: { title: '学习云开发', completed: false, createTime: new Date() }, success(res) { console.log('添加成功', res._id) }, fail(err) { console.error('添加失败', err) } })
### 查询与更新数据
```javascript
// 查询所有未完成的任务
db.collection('todos')
.where({
completed: false
})
.get()
.then(res => {
console.log('查询结果', res.data)
})
// 更新某条记录的 completed 字段
db.collection('todos')
.doc('记录_id')
.update({
data: {
completed: true
}
})
需要注意:出于安全考虑,小程序端对数据库的写操作(增删改)默认配置了权限,只有创建者可以修改。你可以在云开发控制台的“数据库” -> “权限设置”中自定义规则,例如所有用户可读、仅管理员可写等。
云存储实战:图片上传与展示
云存储提供了文件上传、下载、临时链接生成等能力,非常适合做用户头像、动态配图等场景。
上传文件
wx.chooseImage({
count: 1,
success(res) {
const filePath = res.tempFilePaths[0]
const cloudPath = `images/${Date.now()}-${Math.random()}.png`
wx.cloud.uploadFile({
cloudPath, // 上传至云端的路径
filePath, // 小程序临时文件路径
success: res => {
console.log('上传成功', res.fileID) // fileID 为云端唯一标识
},
fail: err => {
console.error('上传失败', err)
}
})
}
})
获取图片链接并显示
上传成功后得到的 fileID 可以换取临时链接,用于 <image> 组件展示:
wx.cloud.getTempFileURL({
fileList: [fileID],
success: res => {
const imageUrl = res.fileList[0].tempFileURL
// 将 imageUrl 绑定到页面 image 标签的 src
}
})
存储权限控制
默认情况下云存储仅创建者可以读取和写入,你可以在云开发控制台“存储”中修改存储桶权限为“所有用户可读,仅创建者及管理员可写”以满足常见需求。
云函数:突破前端限制的后端逻辑
云函数运行在服务端,可以处理复杂的业务逻辑,安全地调用第三方 API,或是对数据库进行批量操作。
创建并部署第一个云函数
- 在项目根目录下的
cloudfunctions文件夹上右键,选择“新建 Node.js 云函数”,命名为getOpenid。 - 在
getOpenid/index.js中写入以下代码:
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
return {
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
- 右键点击
getOpenid文件夹,选择“上传并部署:云端安装依赖”。部署完成后,该云函数即可被调用。
在小程序中调用云函数
wx.cloud.callFunction({
name: 'getOpenid',
data: {
// 传递的参数
},
success: res => {
console.log('openid:', res.result.openid)
}
})
云函数操作数据库
云函数中可以直接使用云数据库,且不受前端权限限制。例如,实现一个“管理员取消所有待办”的功能:
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
const db = cloud.database()
exports.main = async (event) => {
try {
const res = await db.collection('todos').where({
completed: true
}).remove()
return { success: true, deleted: res.stats.removed }
} catch(e) {
return { success: false, error: e }
}
}
云调用:免鉴权使用微信开放接口
云调用是云函数专属能力,可以直接调用微信开放平台接口,无需通过服务端获取 access_token。例如,向用户发送订阅消息:
const cloud = require('wx-server-sdk')
cloud.init({ env: cloud.DYNAMIC_CURRENT_ENV })
exports.main = async (event) => {
try {
const result = await cloud.openapi.subscribeMessage.send({
touser: cloud.getWXContext().OPENID,
templateId: '模板id',
data: {
thing1: { value: '任务完成通知' },
time2: { value: '2025-01-01 12:00' }
}
})
return result
} catch(e) {
return e
}
}