Skip to content

小程序云开发

开通云开发服务

步骤1:在开发者工具中开通

  1. 打开微信开发者工具
  2. 点击左侧菜单栏的「云开发」按钮
  3. 在弹出的窗口中点击「开通云开发服务」
  4. 选择适合的环境(免费版、专业版等)

步骤2:初始化云开发

javascript
// app.js
App({
  onLaunch: function() {
    // 初始化云开发
    if (wx.cloud) {
      wx.cloud.init({
        env: 'your-environment-id', // 云环境ID
        traceUser: true, // 记录用户访问
      })
    }
  }
})

步骤3:获取环境信息

在云开发控制台中可以看到:

  • 环境ID:每个环境的唯一标识
  • 默认环境:可以设置一个默认环境

云数据库:直接在前端操作数据库

云数据库是一个 NoSQL 数据库,支持在小程序前端直接操作。

核心概念

  • 集合 (Collection):相当于 SQL 的表
  • 记录 (Record/Document):相当于 SQL 的行
  • 字段 (Field):相当于 SQL 的列

初始化数据库

javascript
// 获取数据库引用
const db = wx.cloud.database()

// 或者指定环境
const db = wx.cloud.database({
  env: 'your-environment-id'
})

增删改查操作

增加数据:

javascript
// 添加一条记录
Page({
  addData: function() {
    db.collection('todos').add({
      data: {
        description: '学习云开发',
        due: new Date('2024-01-01'),
        tags: ['study', 'cloud'],
        done: false,
        progress: 0,
        created: db.serverDate() // 服务器时间
      },
      success: res => {
        console.log('添加成功', res._id)
        wx.showToast({ title: '添加成功' })
      },
      fail: err => {
        console.error('添加失败', err)
      }
    })
  }
})

查询数据:

javascript
// 基本查询
Page({
  getData: function() {
    db.collection('todos')
      .where({
        done: false, // 查询条件
        progress: _.gt(50) // 使用数据库命令:progress > 50
      })
      .orderBy('created', 'desc') // 排序
      .limit(10) // 限制数量
      .get()
      .then(res => {
        console.log('查询结果', res.data)
        this.setData({ todos: res.data })
      })
      .catch(err => {
        console.error('查询失败', err)
      })
  }
})

更新数据:

javascript
// 更新记录
Page({
  updateData: function(id) {
    db.collection('todos').doc(id).update({
      data: {
        done: true,
        progress: 100,
        finished: db.serverDate()
      },
      success: res => {
        console.log('更新成功', res)
      }
    })
  },

  // 条件更新
  updateByCondition: function() {
    db.collection('todos')
      .where({ done: false })
      .update({
        data: {
          priority: _.inc(1) // 自增1
        }
      })
  }
})

删除数据:

javascript
// 删除单条记录
Page({
  deleteData: function(id) {
    db.collection('todos').doc(id).remove({
      success: res => {
        console.log('删除成功', res)
      }
    })
  },

  // 条件删除
  deleteByCondition: function() {
    db.collection('todos')
      .where({ done: true })
      .remove()
  }
})

数据库命令:

javascript
const _ = db.command

// 使用数据库命令进行复杂查询
db.collection('todos')
  .where({
    progress: _.gt(50), // 大于50
    tags: _.all(['study', 'cloud']), // 同时包含study和cloud
    created: _.lt(new Date('2024-01-01')) // 小于指定日期
  })
  .get()

云存储:直接在前端上传和管理文件

云存储提供文件上传、下载、管理的能力。

上传文件

javascript
// 上传图片
Page({
  chooseAndUpload: function() {
    // 选择图片
    wx.chooseImage({
      count: 1,
      success: res => {
        const filePath = res.tempFilePaths[0]
        
        // 上传到云存储
        wx.cloud.uploadFile({
          cloudPath: `images/${Date.now()}-${Math.random().toString(36).substr(2)}.jpg`,
          filePath: filePath,
          success: res => {
            console.log('上传成功', res.fileID)
            this.setData({ imageUrl: res.fileID })
          },
          fail: err => {
            console.error('上传失败', err)
          }
        })
      }
    })
  },

  // 上传其他类型文件
  uploadPDF: function() {
    wx.chooseMessageFile({
      type: 'file',
      success: res => {
        const file = res.tempFiles[0]
        wx.cloud.uploadFile({
          cloudPath: `files/${file.name}`,
          filePath: file.path,
          success: res => {
            console.log('文件上传成功', res.fileID)
          }
        })
      }
    })
  }
})

下载文件

javascript
// 下载文件
Page({
  downloadFile: function(fileID) {
    wx.cloud.downloadFile({
      fileID: fileID,
      success: res => {
        console.log('下载成功', res.tempFilePath)
        // 可以预览或保存文件
      },
      fail: err => {
        console.error('下载失败', err)
      }
    })
  },

  // 获取临时链接(用于图片显示等)
  getTempURL: function(fileID) {
    wx.cloud.getTempFileURL({
      fileList: [fileID],
      success: res => {
        console.log('临时链接', res.fileList[0].tempFileURL)
      }
    })
  }
})

文件管理

javascript
// 删除文件
Page({
  deleteFile: function(fileID) {
    wx.cloud.deleteFile({
      fileList: [fileID],
      success: res => {
        console.log('删除成功', res.fileList)
      }
    })
  },

  // 批量获取文件信息
  getFileInfo: function(fileIDs) {
    wx.cloud.getFileInfo({
      fileList: fileIDs.map(id => ({ fileID: id, maxAge: 3600 })),
      success: res => {
        console.log('文件信息', res.fileList)
      }
    })
  }
})

云函数:在服务器端运行 Node.js 代码

云函数运行在 Node.js 环境中,可以处理复杂逻辑、调用第三方服务等。

创建和部署云函数

步骤1:创建云函数目录

cloud/
└── functions/
    ├── login/           # 登录云函数
    │   ├── index.js
    │   └── config.json
    ├── payment/         # 支付云函数
    │   ├── index.js
    │   └── package.json
    └── sendSMS/         # 发送短信云函数
        ├── index.js
        └── package.json

步骤2:编写云函数

javascript
// cloud/functions/login/index.js
const cloud = require('wx-server-sdk')
cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
  const wxContext = cloud.getWXContext()
  
  // 在这里可以:
  // 1. 调用第三方API
  // 2. 进行复杂计算
  // 3. 操作数据库(有更高权限)
  // 4. 使用敏感信息(如API密钥)
  
  return {
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
    userInfo: event.userInfo,
    timestamp: new Date()
  }
}

步骤3:在开发者工具中部署

  1. 右键云函数目录
  2. 选择「上传并部署:所有文件」

调用云函数

javascript
// 小程序端调用云函数
Page({
  callCloudFunction: function() {
    wx.cloud.callFunction({
      name: 'login', // 云函数名称
      data: { // 传递给云函数的参数
        userInfo: this.data.userInfo,
        action: 'login'
      },
      success: res => {
        console.log('云函数调用成功', res.result)
        this.setData({ userData: res.result })
      },
      fail: err => {
        console.error('云函数调用失败', err)
      }
    })
  }
})

实际应用场景

场景1:敏感信息处理(支付)

javascript
// cloud/functions/payment/index.js
const cloud = require('wx-server-sdk')
cloud.init()

// 引入支付SDK(不要在客户端存储支付密钥)
const paymentSDK = require('payment-sdk')

exports.main = async (event) => {
  const { orderId, amount, productName } = event
  
  try {
    // 调用支付接口(密钥在服务端,安全)
    const paymentResult = await paymentSDK.createOrder({
      orderId,
      amount,
      productName,
      apiKey: 'your-secret-api-key' // 安全地使用密钥
    })
    
    return {
      success: true,
      paymentData: paymentResult
    }
  } catch (error) {
    return {
      success: false,
      error: error.message
    }
  }
}

场景2:复杂计算(数据统计)

javascript
// cloud/functions/statistics/index.js
exports.main = async (event) => {
  const db = cloud.database()
  
  // 进行复杂的数据库聚合查询
  const result = await db.collection('orders')
    .aggregate()
    .match({ // 匹配条件
      created: _.gte(new Date('2024-01-01'))
    })
    .group({ // 分组统计
      _id: '$status',
      totalAmount: $.sum('$amount'),
      count: $.sum(1)
    })
    .end()
  
  return result
}

场景3:调用第三方服务(发送短信)

javascript
// cloud/functions/sendSMS/index.js
const axios = require('axios')

exports.main = async (event) => {
  const { phone, templateId, params } = event
  
  try {
    // 调用短信服务商API
    const result = await axios.post('https://sms-api.com/send', {
      phone,
      templateId,
      params,
      appKey: 'your-sms-app-key', // 敏感信息安全存储
      appSecret: 'your-sms-app-secret'
    })
    
    return {
      success: true,
      messageId: result.data.messageId
    }
  } catch (error) {
    return {
      success: false,
      error: error.message
    }
  }
}

场景4:数据库高级操作

javascript
// cloud/functions/userManagement/index.js
exports.main = async (event) => {
  const db = cloud.database()
  const _ = db.command
  
  // 在云函数中可以操作所有集合,不受权限限制
  switch (event.action) {
    case 'createUser':
      return await db.collection('users').add({
        data: event.userData
      })
      
    case 'updateUser':
      return await db.collection('users').doc(event.userId).update({
        data: event.updateData
      })
      
    case 'deleteUser':
      return await db.collection('users').doc(event.userId).remove()
      
    default:
      return { error: '未知操作' }
  }
}

云函数配置和依赖

json
// cloud/functions/sendSMS/package.json
{
  "name": "sendSMS",
  "version": "1.0.0",
  "description": "发送短信云函数",
  "main": "index.js",
  "dependencies": {
    "wx-server-sdk": "~2.6.3",
    "axios": "^1.0.0"
  }
}
编程洪同学服务平台是一个广泛收集编程相关内容和资源,旨在满足编程爱好者和专业开发人员的需求的网站。无论您是初学者还是经验丰富的开发者,都可以在这里找到有用的信息和资料,我们将助您提升编程技能和知识。
专业开发
高端定制
售后无忧
站内资源均为本站制作或收集于互联网等平台,如有侵权,请第一时间联系本站,敬请谅解!本站资源仅限于学习与参考,严禁用于各种非法活动,否则后果自行负责,本站概不承担!