微信小程序云开发

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,或是对数据库进行批量操作。

创建并部署第一个云函数

  1. 在项目根目录下的 cloudfunctions 文件夹上右键,选择“新建 Node.js 云函数”,命名为 getOpenid
  2. 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,
  }
}
  1. 右键点击 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
  }
}