微信小程序云开发超详细实战攻略
微信小程序云开发为开发者提供了一站式的后端服务,无需搭建服务器即可快速开发小程序。以下是云开发的详细实战攻略:
一、云开发基础配置
1. 开通云开发服务
- 在微信开发者工具中创建小程序项目
- 在项目配置中勾选"使用云服务"
- 点击"云开发"按钮开通环境(会创建测试环境)
2. 初始化云开发
在app.js中初始化云开发环境:
App({
onLaunch: function() {
wx.cloud.init({
env: 'your-env-id', // 环境ID
traceUser: true, // 记录用户访问
})
}
})
二、云数据库实战
1. 数据库基础操作
// 获取数据库引用
const db = wx.cloud.database()
// 添加数据
db.collection('todos').add({
data: {
title: '学习云开发',
done: false,
createTime: db.serverDate() // 服务器时间
},
success: res => {
console.log('添加成功', res)
}
})
// 查询数据
db.collection('todos').where({
done: false
}).get().then(res => {
console.log('未完成事项', res.data)
})
// 更新数据
db.collection('todos').doc('记录ID').update({
data: {
done: true
}
})
// 删除数据
db.collection('todos').doc('记录ID').remove()
2. 高级查询技巧
// 复合查询
db.collection('todos').where({
progress: _.gt(50), // 进度大于50%
category: 'work'
}).get()
// 分页查询
const PAGE_SIZE = 10
db.collection('todos')
.skip(page * PAGE_SIZE)
.limit(PAGE_SIZE)
.get()
// 排序查询
db.collection('todos')
.orderBy('createTime', 'desc')
.get()
三、云存储实战
1. 文件上传下载
// 上传文件
wx.chooseImage({
success: res => {
const filePath = res.tempFilePaths[0]
const cloudPath = 'my-image/' + Date.now() + filePath.match(/\.[^.]+?$/)[0]
wx.cloud.uploadFile({
cloudPath,
filePath,
success: res => {
console.log('上传成功', res.fileID)
}
})
}
})
// 下载文件
wx.cloud.downloadFile({
fileID: 'cloud://xxx', // 文件ID
success: res => {
console.log('临时路径', res.tempFilePath)
}
})
2. 文件管理
// 获取文件列表
wx.cloud.getTempFileURL({
fileList: ['fileID1', 'fileID2'],
success: res => {
console.log('文件URL', res.fileList)
}
})
// 删除文件
wx.cloud.deleteFile({
fileList: ['fileID'],
success: res => {}
})
四、云函数实战
1. 创建和调用云函数
- 在项目根目录创建
cloudfunctions
文件夹 - 右键文件夹选择"新建Node.js云函数"
- 编写函数代码:
// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函数入口函数
exports.main = async (event, context) => {
const { a, b } = event
return {
sum: a + b
}
}
- 右键函数目录选择"上传并部署"
- 小程序端调用:
wx.cloud.callFunction({
name: 'add',
data: {
a: 1,
b: 2
}
}).then(res => {
console.log('结果', res.result) // {sum: 3}
})
2. 常用云函数示例
获取用户OpenID
exports.main = async (event, context) => {
const wxContext = cloud.getWXContext()
return {
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
}
}
数据库操作
exports.main = async (event, context) => {
const db = cloud.database()
const result = await db.collection('todos').add({
data: event.todo
})
return result
}
调用第三方API
const rp = require('request-promise')
exports.main = async (event, context) => {
return await rp({
uri: 'https://api.example.com/data',
json: true
})
}
五、用户登录与权限控制
1. 用户登录流程
wx.cloud.callFunction({
name: 'login'
}).then(res => {
const { openid } = res.result
// 存储openid用于后续操作
})
2. 数据库权限设置
在集合的权限设置中可以选择:
- 所有用户可读,仅创建者可读写
- 仅创建者可读写
- 所有用户可读
- 所有用户不可读写
3. 安全规则
在云控制台配置安全规则:
{
"todos": {
".read": "auth.openid == doc._openid",
".write": "auth.openid == doc._openid"
}
}
六、高级实战技巧
1. 数据库聚合操作
const $ = db.command.aggregate
db.collection('orders').aggregate()
.group({
_id: '$product',
total: $.sum('$amount')
})
.end()
2. 数据库事务
const db = wx.cloud.database()
db.startTransaction()
.then(t => {
return t.collection('account').doc('A').update({
data: {
balance: _.inc(-100)
}
}).then(() => {
return t.collection('account').doc('B').update({
data: {
balance: _.inc(100)
}
})
}).then(() => t.commit())
})
3. 云函数定时触发器
在云函数目录下新建config.json
:
{
"triggers": [
{
"name": "myTrigger",
"type": "timer",
"config": "0 0 2 * * * *" // 每天凌晨2点执行
}
]
}
七、性能优化与调试
-
数据库优化:
- 合理设计数据库索引
- 避免大量数据一次性返回
- 使用字段投影减少返回数据量
-
云函数优化:
- 保持云函数轻量
- 合理使用缓存
- 避免长时间运行的函数
-
调试技巧:
- 使用云开发控制台查看日志
- 本地调试云函数
- 使用
console.log
输出调试信息
八、常见问题解决方案
- 权限不足:检查数据库权限设置和安全规则
- 云函数调用失败:检查函数是否部署,名称是否正确
- 数据库查询慢:添加适当索引,优化查询条件
- 存储空间不足:清理不必要的文件或升级套餐
通过以上实战攻略,你可以快速掌握微信小程序云开发的核心功能,构建功能丰富的小程序应用而无需关心后端服务器搭建。
小程序开发时,图片和视频资源是否需要额外申请存储服务器呢?
在小程序云开发中处理图片、视频等资源时,可以通过云存储功能直接管理文件,无需额外申请数据存储库,云开发环境已内置了存储服务。以下是具体操作流程和注意事项:
一、资源准备与存储方案
-
云存储的默认支持
小程序云开发环境默认提供云存储空间(免费额度包含一定存储容量和CDN流量),可直接用于存放图片、视频等文件,无需单独申请数据库或服务器。-
存储路径管理:建议在云存储中按类型创建文件夹(如
img
、video
),便于分类管理文件。 -
文件命名规范:为避免文件名冲突,可采用随机字符串+时间戳的方式生成唯一文件名(如
img/随机字符_时间戳.jpg
)。
-
存储路径管理:建议在云存储中按类型创建文件夹(如
-
资源上传流程
-
前端上传:使用
wx.chooseImage
或wx.chooseVideo
选择文件,通过wx.cloud.uploadFile
上传至云存储,返回文件ID(fileID)。 - 云函数处理:若需复杂逻辑(如格式校验、压缩),可在云函数中调用云存储API处理。
-
前端上传:使用
-
元数据存储
文件上传后,需将文件ID、名称、分类等信息存入云数据库,便于后续查询和管理。例如:// 在数据库中记录文件信息 db.collection('resources').add({ data: { fileID: 'cloud://xxx.jpg', type: 'image', createTime: db.serverDate() } })
二、核心操作步骤
创建云存储目录
在云开发控制台的“存储”模块手动创建文件夹(如img
、video
),或在代码中动态指定路径。-
上传文件示例代码
// 上传图片到云存储 wx.chooseImage({ success: res => { const tempPath = res.tempFilePaths[0]; wx.cloud.uploadFile({ cloudPath: 'img/' + Date.now() + '.png', // 指定目录和文件名 filePath: tempPath, success: res => console.log('文件ID:', res.fileID) }) } })
-
文件访问与渲染
通过文件ID直接在小程序前端展示资源:<!-- 图片渲染 --> <image src="{{fileID}}" mode="aspectFit"></image> <!-- 视频播放 --> <video src="{{fileID}}" controls></video>
三、权限与性能优化
-
权限控制
- 在云存储控制台设置文件读写权限(如“所有用户可读,仅创建者可写”)。
- 在云数据库中使用安全规则限制访问(如仅允许用户操作自己的数据)。
-
性能优化建议
- CDN加速:云存储默认启用CDN分发,适合高频访问场景。
-
分页加载:对大量文件采用分页查询(
.skip()
和.limit()
)。 - 缩略图生成:通过云函数对图片进行压缩或生成缩略图,减少流量消耗。
四、常见问题解决
- 上传失败:检查云环境ID是否正确,网络是否通畅。
- 文件访问权限错误:确保数据库和存储权限设置为公开可读。
- 存储空间不足:清理无用文件或升级云开发套餐。
总结
小程序云开发通过内置的云存储和数据库服务,能够高效管理图片、视频等资源,无需额外申请存储库。开发者只需关注业务逻辑设计,合理利用云开发的API和权限机制,即可实现资源的安全存储与快速访问。