开通云开发

  • 首先在app.js中的onLaunch声明云开发初始环境
wx.cloud.init({
env: '云开发环境初始id' })

云数据库

  • _openid 表示每个小程序中唯一的id
增add
  • wx.cloud.database().collection(‘数据库表名’).add({…})
// 添加一条数据库记录
wx.cloud.database().collection('yun-users').add({
data: {
name: '辉辉', age: 24, sex: '男', num: '100' }, success(res) {
console.log(res); // 提示信息 wx.showToast({
title: '添加成功', }) } })
查看get
查看全部
  • wx.cloud.database().collection(‘数据库表名’).get().then(…)
js
// 写法1
getAllData() {
wx.cloud.database().collection('yun-users').get({
success:(res)=> {
console.log(res); this.setData({
dataList: res.data }) } }) } // 写法2 ES6写法 推荐这种 getAllData() {
wx.cloud.database().collection('yun-users').get() .then(res=>{
console.log(res); this.setData({
dataList: res.data }) }) } wxml <block wx:for="{
{dataList}}"
wx:key="id"> <view>{
{
item.name}}---{
{
item.sex}}</view> </block>
单条查询
  • wx.cloud.database().collection(‘数据库表名’).doc(‘条件’).get().then(…)
  • 必须在单个上面添加 data-id=“{
    {item._id}}” 属性 携带参数
  • e.target.dataset.id 获取唯一的id
  • onLoad 生命周期的options获取到的是传递过来的参数的大对象
数据发送方
wxml
<block wx:for="{
{dataList}}"
wx:key="id"> <view bindtap="toDetail" data-id="{
{item._id}}"
>{
{
item.name}}---{
{
item.sex}}</view> </block> js toDetail(e) {
// console.log(e); // console.log(e.target.dataset.id); // 跳转详情页面并携带参数 wx.navigateTo({
url: '/pages/detail/detail?id=' + e.target.dataset.id, }) } 数据接收方 onLoad options接收过来的参数 js wx.cloud.database().collection('yun-users').doc(options.id).get() .then(res=>{
console.log(res); this.setData({
user: res.data }) }) wxml <view>{
{
user.name}} --- {
{
user.age}}</view>
条件查询
  • wx.cloud.database().collection(‘yun-users’).where(…).get(…).then(…)
js
// 获取input中的value
getIptVal(e) {
// console.log(e); // console.log(e.detail.value); this.setData({
iptVal: e.detail.value }) }, showUser() {
wx.cloud.database().collection('yun-users').where({
name: this.data.iptVal, age: 24 }).get() .then(res=>{
// console.log(res); console.log(res.data); this.setData({
personList: res.data }) }) } wxml <input type="text" bindinput="getIptVal" placeholder="请输入关键字"/> <button type="primary" bindtap="showUser">搜索</button> <block wx:for="{
{personList}}"
wx:key="id"> <view>{
{
item.name}} --- {
{
item.age}}</view> </block>
删除

不管是doc还是where删除,都是删除一条

  • wx.cloud.database().collection(‘数据库名’).doc(‘条件判断’).remove().then(…)
  • 这里是根据 id 删除
js
delete(e) {
// console.log(e); // console.log(e.currentTarget.dataset.id); // console.log(e.target.dataset.id); let id = e.currentTarget.dataset.id wx.cloud.database().collection('yun-users').doc(id).remove() .then(res=>{
// console.log(res); wx.showToast({
title: '删除成功', }) }) } wxml <block wx:for="{
{userList}}"
wx:key="id"> <view bindtap="toDetail" data-id="{
{item._id}}"
>{
{
item.name}} --- {
{
item.age}}--<text catchtap="delete" data-id="{
{item._id}}"
>删除</text></view> </block>
  • wx.cloud.database().collection(‘数据库名’).where(‘条件判断’).remove().then(…)
  • 这里是根据条件删除
更新
  • wx.cloud.database().collection(‘数据库名’).update()
wxml
<view>{
{
usersList.name}} --- {
{
usersList.age}}</view> <input bindinput="getIptVal" class="ipt" type="text" placeholder="请输入名字"/> <button bindtap="updateName" type="primary">更新名字数据</button> js // 获取输入框内容 getIptVal(e) {
// console.log(e); // console.log(e.detail.value); this.setData({
iptValue: e.detail.value }) }, // 更新数据 updateName() {
// 根据 _id 指定需要修改的那条数据 wx.cloud.database().collection('demo_01').doc(this.data.usersList._id) .update({
// 把输入框中最新的值绑定到name上 name: this.data.iptValue }) .then(res=>{
console.log(res); // 再把最新的数据渲染到显示上 wx.cloud.database().collection('demo_01').doc(options.id).get() .then(res=>{
// console.log(res); // console.log(res.data); this.setData({
usersList: res.data }) }) wx.showToast({
title: '更新成功', }) }) }
排序
  • wx.cloud.database().collection(‘数据库名’).orderBy(‘根据那个字段排序’,‘升序/降序’).get().then(…)
  • 降序是 desc 升序是 asc
  • 如果有多个排序规则,则再加一个orderBy
wxml
<button bindtap="show" type="primary">显示数据</button>

<block wx:for="{
{users}}"
wx:key="id"> <view catchtap="toDetial" data-id="{
{item._id}}"
>{
{
item.name}}---{
{
item.sex}}---{
{
item.age}}</view> </block> js // 显示并按照年龄排序 show() {
wx.cloud.database().collection('demo_01').orderBy('age','asc').orderBy('num','asc').get() .then(res=>{
// console.log(res); this.setData({
users: res.data }) }) },
分页
  • 如果要展示的数据过多,这个时候就需要分页了(skip,limit)

  • 官方限制最多可查看20条记录

模糊查询
根据单个字段模糊查询
  • wx.cloud.database().collection(‘数据库名’).where({ 条件:wx.cloud.database().RegExp({条件判断}) }).get().then(…)
  • RegExp有两个参数:regexp指定模糊匹配的值,options:’i‘ 意思为不大小写
wxml
<input class="ipt" bindinput="getVal" type="text" placeholder="请搜索"/>
<button bindtap="search" type="primary">点击搜索</button>
<block wx:for="{
{usersList}}"
wx:key="id"> <view>{
{
item.name}}--{
{
item.age}}</view> </block> js // 得到输入框的值 getVal(e) {
// console.log(e.detail.value); this.setData({
iptVal: e.detail.value }) }, // 根据单条记录模糊查询 search() {
// name: this.data.iptVal, wx.cloud.database().collection('demo_01').where({
name: wx.cloud.database().RegExp({
regexp: this.data.iptVal, options: 'i' // 不区分大小写 }) }).get() .then(res=>{
// console.log(res.data); this.setData({
usersList: res.data }) }) },
根据多个字段模糊查询
  • wx.cloud.database().collection(‘数据库名’).where({ 条件:wx.cloud.database().command.or/and([{条件},{条件}]) }).get().then(…)

  • and 和 or

wxml
<input class="ipt" bindinput="getVal" type="text" placeholder="请搜索"/>
<button bindtap="search" type="primary">点击搜索</button>
<block wx:for="{
{usersList}}"
wx:key="id"> <view>{
{
item.name}}--{
{
item.age}}</view> </block> js // 得到输入框的值 getVal(e) {
// console.log(e.detail.value); this.setData({
iptVal: e.detail.value }) }, // 根据多条记录模糊查询 search() {
wx.cloud.database().collection('demo_01').where(wx.cloud.database().command.or([ {
name: wx.cloud.database().RegExp({
regexp: this.data.iptVal, options: 'i' // 不区分大小写 }) }, {
desc: wx.cloud.database().RegExp({
regexp: this.data.iptVal, options: 'i' // 不区分大小写 }) } ])).get() .then(res=>{
// console.log(res.data); this.setData({
usersList: res.data }) }) },

云函数

  • 用于实现比较复杂的一些功能
初始化云函数
  1. 单独创建个文件夹
  2. project.config.js中做出配置
"description": "项目配置文件",
"cloudfunctionRoot": "cloud/",
新建云函数
  • 右键新建node.js云函数
使用云函数
  • 如果没有部署,右键第三个选择上传并部署云端安装依赖
  • wx.cloud.callFunction({name:‘云函数名’}).then(…)
app.js   书写一个获取openid的方法
wx.cloud.init({
env: 'cloud1-6g265vz620ba87df' }) // 获取用户的openid wx.cloud.callFunction({
name: 'getUserOpenid' }).then(res=>{
// console.log(res); // console.log(res.result.openid); this.globalData.openid = res.result.openid }) globalData: {
userInfo: null, openid: null } // 页面使用 <button bindtap="getUserOpenid" type="primary">获取用户openid</button> // 获得用户openid getUserOpenid() {
console.log(app.globalData.openid); }
使用云函数增删改查
// 云函数
// 往云数据库增加数据
return cloud.database().collection('demo_01').add({
data: {
name: event.name } }) wxml <input class="ipt" bindinput="getIptVal" type="text" placeholder="请输入您想添加的名字"/> <button bindtap="add" type="primary">添加数据</button> js // 获取输入框中的内容 getIptVal(e) {
// console.log(e.detail.value); this.setData({
iptVal: e.detail.value }) }, add() {
wx.cloud.callFunction({
name: 'addData', data: {
name: this.data.iptVal } }).then(res=>{
console.log(res); }) },
// 云函数
return cloud.database().collection('demo_01').doc(event.id).remove()

wxml
<button type="primary" bindtap="delect">删除用户</button>
js
delect() {
wx.cloud.callFunction({
data: {
name: 'removeData', data: {
id: '54ad1eea6225c88014c3989b67af1afe' } } }).then(res=>{
console.log(res); }) }

云存储

上传图片
  • wx.chooseImage({count: 限制几张…}).then(…)


    • count: 限制几张
    • sizeType: [‘original’,‘compressed’], // 所选的图片的尺寸,原图/压缩图
    • sourceType: [‘album’,‘camera’], // 选择图片的来源,从相册选图/使用相机
  • wx.cloud.uploadFile


    • cloudPath: 文件名, // 上传至云端的路径
    • filePath: 路径 // 小程临时文件路径
wxml
<button type="primary" bindtap="upload">上传图片</button>
<image src="{
{imgUrl}}"
></image> <image src="{
{yunImgId}}"
></image> js upload() {
// 首先选择图片 wx.chooseImage({
count: 1, sizeType: ['compressed'], // 所选的图片的尺寸,原图/压缩图 sourceType: ['album'], // 选择图片的来源,从相册选图/使用相机 }).then(res=>{
// console.log(res); // console.log(res.tempFilePaths[0]); this.setData({
imgUrl: res.tempFilePaths[0] }) // 然后上传文件 let random = Math.random() // console.log(random); let time = Date.now() // console.log(time); wx.cloud.uploadFile({
cloudPath: `users/${
random}
-${
time}
-user.png`
, // 上传至云端的路径 filePath: res.tempFilePaths[0] // 小程临时文件路径 }).then(result=>{
console.log(result); this.setData({
yunImgId: result.fileID }) }) }) }
更新头像
wxml
<button bindtap="uploadUserHeader" type="primary">更新头像</button>
<view class="img">
  <image src="{
{imgUrl}}"
></image> </view> js // 更新用户头像 uploadUserHeader() {
// 让用户选择图片 wx.chooseImage({
count: 1, }).then(res=>{
// console.log(res.tempFilePaths[0]); // this.setData({
// imgUrl: res.tempFilePaths[0] // }) // 然后上传头像 let random = Math.random() let time = Date.now() wx.cloud.uploadFile({
cloudPath: `users/${
random}
-${
time}
-user.png`
, filePath: res.tempFilePaths[0] }).then(res=>{
// console.log(res); // console.log(res.fileID); this.setData({
imgUrl: res.fileID }) }) // 把头像穿插到对应的数据库中 // console.log(this.data.usersList._id); wx.cloud.database().collection('demo_02').doc(this.data.usersList._id).update({
data: {
userHeader: this.data.imgUrl } }) wx.showToast({
title: '上传成功', }) // console.log(this.data.usersList); }) }
上传视频
  • wx.chooseVideo({…}) 选择上传的视频


    • camera: camera, // 默认拉起的是前置或者后置摄像头 back:后置 front:前置
    • sourceType: [‘album’,‘camera’], // 是否压缩所选择的视频文件
    • maxDuration: 60, // 拍摄视频最长拍摄时间,单位秒
  • wx.cloud.uploadFile


    • cloudPath: 文件名, // 上传至云端的路径
    • filePath: 路径 // 小程临时文件路径
wxml
<button bindtap="uploadVideo" type="primary">上传视频</button>
<video wx:if="{
{VideoPath ? true:false}}"
src="{
{VideoPath}}"
></video> js // 上传视频 uploadVideo() {
// 选择视频 wx.chooseVideo({
camera: 'back', // 默认拉起的是前置或者后置摄像头 back:后置 front:前置 sourceType: ['album','camera'], // 是否压缩所选择的视频文件 maxDuration: 60, // 拍摄视频最长拍摄时间,单位秒 }).then(res=>{
// 获取到了上传成功后本地的地址 // console.log(res.tempFilePath); // this.setData({
// VideoPath: res.tempFilePath // }) // 上传视频 let random = Math.random() let time = Date.now() wx.cloud.uploadFile({
cloudPath: `video/${
random}
-${
time}
-file.mp4`
, // 上传至云端的路径 filePath: res.tempFilePath // 小程临时文件路径 }).then(res=>{
// 获取云端的视频路径fileID // console.log(res.fileID); this.setData({
VideoPath: res.fileID }) // 提示上传成功 wx.showToast({
title: '上传成功', }) }) wx.showLoading({
title: '上传中...', }) }) }
上传文件
  • 选择文件:从客户端会话(微信好友,群,文件助手)选择文件

  • wx.chooseMessageFile({…})


    • count:文件最多选择多少个
    • type:文件类型
      • all 从所有文件选择
      • video 只能选择视频文件
      • image 只能选择图片文件
      • file 可以选择除了图片和视频之外的其他的文件 如word,excel,pdf…
  • wx.cloud.uploadFile


    • cloudPath: 文件名, // 上传至云端的路径
    • filePath: 路径 // 小程临时文件路径
下载文件
  • wx.cloud.downloadFile({})
wxml
<button type="primary" bindtap="uploadFile">上传文件</button>
<block wx:for="{
{fileList}}"
wx:key="id"> <view class="down"> <view>{
{
item.fileName}}</view> <view bindtap="downFile" data-url="{
{item.fileId}}"
>下载</view> </view> </block> js onLoad: function (options) {
this.getFileList() }, getFileList() {
// 查找到id wx.cloud.database().collection('yun-file').get() .then(res=>{
// console.log(res.data); this.setData({
fileList: res.data }) }) }, uploadFile() {
// 选择文件 wx.chooseMessageFile({
count: 10, // 选择文件的个数 type: 'all', // 选择文件的类型 }).then(res=>{
// console.log(res.tempFiles[0].path); // 上传文件到云存储 wx.cloud.uploadFile({
cloudPath: res.tempFiles[0].name, filePath: res.tempFiles[0].path }).then(result=>{
// console.log(result.fileID); // 保存fileId到数据库 wx.cloud.database().collection('yun-file').add({
data: {
fileName: res.tempFiles[0].name, fileId: result.fileID } }).then(aaa=>{
// console.log(aaa); wx.showToast({
title: '上传成功', }) // 重新渲染页面 this.getFileList() }) }) }) }, // 下载文件 downFile(e) {
// console.log(e.currentTarget.dataset.url); wx.cloud.downloadFile({
fileID: e.currentTarget.dataset.url }).then(res=>{
// 下载到本地的路径 // console.log(res.tempFilePath); // 直接打开本地文件 wx.openDocument({
filePath: res.tempFilePath, }).then(result=>{
console.log(result); }) }) }

原文链接:https://blog.csdn.net/qq_52845451/article/details/126934212

最后修改:2023 年 10 月 30 日
如果觉得我的文章对你有用,请随意赞赏