幸福没有标准 發表於 2020-2-16 16:58:00

微信小程序入门笔记-使用云开发(4)

<h2>1、云数据库</h2>
<h3>一、介绍</h3>
<p>云开发提供了一个 JSON 数据库,顾名思义,数据库中的每条记录都是一个 JSON 格式的对象。一个数据库可以有多个集合(相当于关系型数据中的表),集合可看做一个 JSON 数组,数组中的每个对象就是一条记录,记录的格式是 JSON 对象。</p>
<p>关系型数据库和 JSON 数据库的概念对应关系如下表:</p>
<div class="table-wrp">
<table>
<thead>
<tr><th>关系型</th><th>文档型</th></tr>
</thead>
<tbody>
<tr>
<td>数据库 database</td>
<td>数据库 database</td>
</tr>
<tr>
<td>表 table</td>
<td>集合 collection</td>
</tr>
<tr>
<td>行 row</td>
<td>记录 record / doc</td>
</tr>
<tr>
<td>列 column</td>
<td>字段 field</td>
</tr>
</tbody>
</table>
<p>云开发数据库提供以下几种数据类型:</p>
<ul>
<li>String:字符串</li>
<li>Number:数字</li>
<li>Object:对象</li>
<li>Array:数组</li>
<li>Bool:布尔值</li>
<li>Date:时间</li>
<li>Geo:多种地理位置类型,详见</li>
<li>Null</li>
</ul>
<h3>&nbsp;二、使用</h3>
<p>(1、使用之前把页面创建好(我创建了home和personal):</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1406035/202002/1406035-20200216152533894-1594441430.png"></p>
<p>&nbsp;</p>
<p>(2、配置app.json</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1406035/202002/1406035-20200216153611479-1651840758.png"></p>
<p>&nbsp;</p>
<p>在“云开发”中点击数据库,创建user、image两个集合</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1406035/202002/1406035-20200216150722451-859004757.png"></p>
<p>personal.js</p>
<div class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_b0d08090-0df7-4b5a-a158-0824a91e50be" class="code_img_opened lazyload" style="display: none" alt="" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_b0d08090-0df7-4b5a-a158-0824a91e50be" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 128, 0, 1)"> * 初始化数据库
</span><span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 128, 0, 1)"> * 用evn属性可以切换属性
</span><span style="color: rgba(0, 128, 128, 1)">4</span> <span style="color: rgba(0, 128, 0, 1)"> * database({evn:test})
</span><span style="color: rgba(0, 128, 128, 1)">5</span><span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">6</span> const db =<span style="color: rgba(0, 0, 0, 1)"> wx.cloud.database();
</span><span style="color: rgba(0, 128, 128, 1)">7</span> const user = db.collection("user"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 128, 1)">8</span> <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> pages/personal/personal.js</span>
<span style="color: rgba(0, 128, 128, 1)">9</span> <span style="color: rgba(0, 0, 0, 1)">Page({
</span><span style="color: rgba(0, 128, 128, 1)"> 10</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)"> 11</span> <span style="color: rgba(0, 128, 0, 1)">   * 页面的初始数据
</span><span style="color: rgba(0, 128, 128, 1)"> 12</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 13</span> <span style="color: rgba(0, 0, 0, 1)">data: {
</span><span style="color: rgba(0, 128, 128, 1)"> 14</span> <span style="color: rgba(0, 0, 0, 1)">    images: []
</span><span style="color: rgba(0, 128, 128, 1)"> 15</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)"> 16</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)"> 17</span> <span style="color: rgba(0, 128, 0, 1)">   * 插入数据
</span><span style="color: rgba(0, 128, 128, 1)"> 18</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 19</span>   insert: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 128, 1)"> 20</span> <span style="color: rgba(0, 0, 0, 1)">    user.add({
</span><span style="color: rgba(0, 128, 128, 1)"> 21</span> <span style="color: rgba(0, 0, 0, 1)">      data: {
</span><span style="color: rgba(0, 128, 128, 1)"> 22</span>         name: 'hh'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 23</span>         age: 20
<span style="color: rgba(0, 128, 128, 1)"> 24</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 25</span>   }).then(res=&gt;<span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)"> 26</span>       <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 回调函数</span>
<span style="color: rgba(0, 128, 128, 1)"> 27</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res)
</span><span style="color: rgba(0, 128, 128, 1)"> 28</span> <span style="color: rgba(0, 0, 0, 1)">      wx.showToast({
</span><span style="color: rgba(0, 128, 128, 1)"> 29</span>         title: 'success'<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 30</span> <span style="color: rgba(0, 0, 0, 1)">      })
</span><span style="color: rgba(0, 128, 128, 1)"> 31</span>   }).<span style="color: rgba(0, 0, 255, 1)">catch</span>(err=&gt;<span style="color: rgba(0, 0, 0, 1)">{
</span><span style="color: rgba(0, 128, 128, 1)"> 32</span>       <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">抓取错误</span>
<span style="color: rgba(0, 128, 128, 1)"> 33</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(err)
</span><span style="color: rgba(0, 128, 128, 1)"> 34</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)"> 35</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)"> 36</span>   update: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 128, 1)"> 37</span>   <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 根据云数据库 _id更新</span>
<span style="color: rgba(0, 128, 128, 1)"> 38</span>   user.doc('1acf1de95e48f2f310877a982d2de27f'<span style="color: rgba(0, 0, 0, 1)">).update({
</span><span style="color: rgba(0, 128, 128, 1)"> 39</span> <span style="color: rgba(0, 0, 0, 1)">      data: {
</span><span style="color: rgba(0, 128, 128, 1)"> 40</span>         age: 19<span style="color: rgba(0, 0, 0, 1)">,
</span><span style="color: rgba(0, 128, 128, 1)"> 41</span>         name: 'mm'
<span style="color: rgba(0, 128, 128, 1)"> 42</span> <span style="color: rgba(0, 0, 0, 1)">      }
</span><span style="color: rgba(0, 128, 128, 1)"> 43</span>   }).then(res =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 44</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res)
</span><span style="color: rgba(0, 128, 128, 1)"> 45</span>       console.log('success'<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 46</span>   }).<span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 47</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(err)
</span><span style="color: rgba(0, 128, 128, 1)"> 48</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)"> 49</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)"> 50</span>   select: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 128, 128, 1)"> 51</span> <span style="color: rgba(0, 0, 0, 1)">    user.where({
</span><span style="color: rgba(0, 128, 128, 1)"> 52</span>       name: 'hh'
<span style="color: rgba(0, 128, 128, 1)"> 53</span>   }).get().then(res =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 54</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res)
</span><span style="color: rgba(0, 128, 128, 1)"> 55</span>       console.log('success'<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 56</span>   }).<span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 57</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(err)
</span><span style="color: rgba(0, 128, 128, 1)"> 58</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)"> 59</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)"> 60</span>   del: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
</span><span style="color: rgba(0, 128, 128, 1)"> 61</span>   user.doc('1acf1de95e48f2f310877a982d2de27f'<span style="color: rgba(0, 0, 0, 1)">).remove()
</span><span style="color: rgba(0, 128, 128, 1)"> 62</span>   .then(res =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 63</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(res)
</span><span style="color: rgba(0, 128, 128, 1)"> 64</span>       console.log('success'<span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 128, 128, 1)"> 65</span>   }).<span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 128, 1)"> 66</span> <span style="color: rgba(0, 0, 0, 1)">      console.log(err)
</span><span style="color: rgba(0, 128, 128, 1)"> 67</span> <span style="color: rgba(0, 0, 0, 1)">    })
</span><span style="color: rgba(0, 128, 128, 1)"> 68</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)"> 69</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)"> 70</span> <span style="color: rgba(0, 128, 0, 1)">   * 生命周期函数--监听页面加载
</span><span style="color: rgba(0, 128, 128, 1)"> 71</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 72</span>   onLoad: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (options) {
</span><span style="color: rgba(0, 128, 128, 1)"> 73</span>
<span style="color: rgba(0, 128, 128, 1)"> 74</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)"> 75</span>
<span style="color: rgba(0, 128, 128, 1)"> 76</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)"> 77</span> <span style="color: rgba(0, 128, 0, 1)">   * 生命周期函数--监听页面初次渲染完成
</span><span style="color: rgba(0, 128, 128, 1)"> 78</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 79</span>   onReady: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 128, 128, 1)"> 80</span>
<span style="color: rgba(0, 128, 128, 1)"> 81</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)"> 82</span>
<span style="color: rgba(0, 128, 128, 1)"> 83</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)"> 84</span> <span style="color: rgba(0, 128, 0, 1)">   * 生命周期函数--监听页面显示
</span><span style="color: rgba(0, 128, 128, 1)"> 85</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 86</span>   onShow: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 128, 128, 1)"> 87</span>
<span style="color: rgba(0, 128, 128, 1)"> 88</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)"> 89</span>
<span style="color: rgba(0, 128, 128, 1)"> 90</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)"> 91</span> <span style="color: rgba(0, 128, 0, 1)">   * 生命周期函数--监听页面隐藏
</span><span style="color: rgba(0, 128, 128, 1)"> 92</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)"> 93</span>   onHide: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 128, 128, 1)"> 94</span>
<span style="color: rgba(0, 128, 128, 1)"> 95</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)"> 96</span>
<span style="color: rgba(0, 128, 128, 1)"> 97</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)"> 98</span> <span style="color: rgba(0, 128, 0, 1)">   * 生命周期函数--监听页面卸载
</span><span style="color: rgba(0, 128, 128, 1)"> 99</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">100</span>   onUnload: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 128, 128, 1)">101</span>
<span style="color: rgba(0, 128, 128, 1)">102</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">103</span>
<span style="color: rgba(0, 128, 128, 1)">104</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)">105</span> <span style="color: rgba(0, 128, 0, 1)">   * 页面相关事件处理函数--监听用户下拉动作
</span><span style="color: rgba(0, 128, 128, 1)">106</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">107</span>   onPullDownRefresh: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 128, 128, 1)">108</span>
<span style="color: rgba(0, 128, 128, 1)">109</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">110</span>
<span style="color: rgba(0, 128, 128, 1)">111</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)">112</span> <span style="color: rgba(0, 128, 0, 1)">   * 页面上拉触底事件的处理函数
</span><span style="color: rgba(0, 128, 128, 1)">113</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">114</span>   onReachBottom: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 128, 128, 1)">115</span>
<span style="color: rgba(0, 128, 128, 1)">116</span> <span style="color: rgba(0, 0, 0, 1)">},
</span><span style="color: rgba(0, 128, 128, 1)">117</span>
<span style="color: rgba(0, 128, 128, 1)">118</span>   <span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
</span><span style="color: rgba(0, 128, 128, 1)">119</span> <span style="color: rgba(0, 128, 0, 1)">   * 用户点击右上角分享
</span><span style="color: rgba(0, 128, 128, 1)">120</span>    <span style="color: rgba(0, 128, 0, 1)">*/</span>
<span style="color: rgba(0, 128, 128, 1)">121</span>   onShareAppMessage: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
</span><span style="color: rgba(0, 128, 128, 1)">122</span>
<span style="color: rgba(0, 128, 128, 1)">123</span> <span style="color: rgba(0, 0, 0, 1)">}
</span><span style="color: rgba(0, 128, 128, 1)">124</span> })</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>personal.wxml</p>
<div class="cnblogs_code"><img id="code_img_closed_f208026d-8b96-4cb1-b686-1fbc620f867a" class="code_img_closed lazyload" alt="" data-src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_f208026d-8b96-4cb1-b686-1fbc620f867a" class="code_img_opened lazyload" style="display: none" alt="" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_f208026d-8b96-4cb1-b686-1fbc620f867a" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>云数据库<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">bindtap</span><span style="color: rgba(0, 0, 255, 1)">="insert"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>插入数据<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">bindtap</span><span style="color: rgba(0, 0, 255, 1)">="update"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>更新数据<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">4</span> <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">bindtap</span><span style="color: rgba(0, 0, 255, 1)">="select"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>查询数据<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>
<span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">button </span><span style="color: rgba(255, 0, 0, 1)">bindtap</span><span style="color: rgba(0, 0, 255, 1)">="del"</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span>删除数据<span style="color: rgba(0, 0, 255, 1)">&lt;/</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p><img alt="" data-src="https://img2018.cnblogs.com/i-beta/1406035/202002/1406035-20200216155108948-1309522621.png"></p>
<h2>2、云函数</h2>
<h3>&nbsp;一、介绍</h3>
<p>云函数即在云端(服务器端)运行的函数。在物理设计上,一个云函数可由多个文件组成,占用一定量的 CPU 内存等计算资源;各云函数完全独立;可分别部署在不同的地区。开发者无需购买、搭建服务器,只需编写函数代码并部署到云端即可在小程序端调用,同时云函数之间也可互相调用。</p>
<p>一个云函数的写法与一个在本地定义的 JavaScript 方法无异,代码运行在云端 Node.js 中。当云函数被小程序端调用时,定义的代码会被放在 Node.js 运行环境中执行。我们可以如在 Node.js 环境中使用 JavaScript 一样在云函数中进行网络请求等操作,而且我们还可以通过云函数后端 SDK 搭配使用多种服务,比如使用云函数 SDK 中提供的数据库和存储 API 进行数据库和存储的操作,这部分可参考数据库和存储后端 API 文档。</p>
<p>云开发的云函数的独特优势在于与微信登录鉴权的无缝整合。当小程序端调用云函数时,云函数的传入参数中会被注入小程序端用户的 openid,开发者无需校验 openid 的正确性因为微信已经完成了这部分鉴权,开发者可以直接使用该 openid。</p>
<h3>二、使用</h3>
<p>(1、安装nodejs环境</p>
<p>(2、创建云函数(我这里创建了3个云函数)</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1406035/202002/1406035-20200216162159150-691500690.png"></p>
<p>&nbsp;</p>
<p>修改各个云函数的index.js</p>
<p>batchDelete:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 云函数入口文件</span>
const cloud = require('wx-server-sdk'<span style="color: rgba(0, 0, 0, 1)">)

cloud.init()
const db </span>=<span style="color: rgba(0, 0, 0, 1)"> cloud.database();
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 云函数入口函数</span>
exports.main = async (event, context) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">{
    </span><span style="color: rgba(0, 0, 255, 1)">return</span> await db.collection('user'<span style="color: rgba(0, 0, 0, 1)">).where({
      name: </span>'hh'<span style="color: rgba(0, 0, 0, 1)">
    }).remove();
}</span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)">(e){
    console.error(e)
}
}</span></pre>
</div>
<p>login:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 云函数模板</span><span style="color: rgba(0, 128, 0, 1)">
//</span><span style="color: rgba(0, 128, 0, 1)"> 部署:在 cloud-functions/login 文件夹右击选择 “上传并部署”</span>
<span style="color: rgba(0, 0, 0, 1)">
const cloud </span>= require('wx-server-sdk'<span style="color: rgba(0, 0, 0, 1)">)

</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 初始化 cloud</span>
<span style="color: rgba(0, 0, 0, 1)">cloud.init({
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> API 调用都保持和云函数当前所在环境一致</span>
<span style="color: rgba(0, 0, 0, 1)">env: cloud.DYNAMIC_CURRENT_ENV
})

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 这个示例将经自动鉴权过的小程序用户 openid 返回给小程序端
*
* event 参数包含小程序端调用传入的 data
*
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
exports.main </span>= (event, context) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 可执行其他自定义逻辑</span>
<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> console.log 的内容可以在云开发云函数调用日志查看</span>

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取 WX Context (微信调用上下文),包括 OPENID、APPID、及 UNIONID(需满足 UNIONID 获取条件)等信息</span>
const wxContext =<span style="color: rgba(0, 0, 0, 1)"> cloud.getWXContext()

</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
    event,
    openid: wxContext.OPENID,
    appid: wxContext.APPID,
    unionid: wxContext.UNIONID,
    env: wxContext.ENV,
}
}</span></pre>
</div>
<p>sum:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> const cloud = require('wx-server-sdk')</span>

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> cloud.init()</span>

<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 云函数入口函数</span>
exports.main = async (event, context) =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
    sum: event.a </span>+<span style="color: rgba(0, 0, 0, 1)"> event.b
}
}</span></pre>
</div>
<p>然后把写完的函数都要上传云端(<span style="color: rgba(255, 0, 0, 1)"><strong>记住修改过云函数一定要同步到云端</strong></span>)</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1406035/202002/1406035-20200216162627208-99064458.png"></p>
<p>&nbsp;<img src="https://img2018.cnblogs.com/i-beta/1406035/202002/1406035-20200216163739139-1429026873.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;页面代码:</p>
<p>personal.js</p>
<div class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_c5a080a3-9069-4453-a28f-3fc191e565c7" class="code_img_opened lazyload" style="display: none" alt="" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_c5a080a3-9069-4453-a28f-3fc191e565c7" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 初始化数据库
* 用evn属性可以切换属性
* database({evn:test})
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
const db </span>=<span style="color: rgba(0, 0, 0, 1)"> wx.cloud.database();
const user </span>= db.collection("user"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> pages/personal/personal.js</span>
<span style="color: rgba(0, 0, 0, 1)">Page({
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 页面的初始数据
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
data: {
    images: []
},
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 插入数据
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
insert: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
    user.add({
      data: {
      name: </span>'hh'<span style="color: rgba(0, 0, 0, 1)">,
      age: </span>20<span style="color: rgba(0, 0, 0, 1)">
      }
    }).then(res</span>=&gt;<span style="color: rgba(0, 0, 0, 1)">{
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 回调函数</span>
<span style="color: rgba(0, 0, 0, 1)">      console.log(res)
      wx.showToast({
      title: </span>'success'<span style="color: rgba(0, 0, 0, 1)">,
      })
    }).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err=&gt;<span style="color: rgba(0, 0, 0, 1)">{
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">抓取错误</span>
<span style="color: rgba(0, 0, 0, 1)">      console.log(err)
    })
},
update: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
    </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 根据云数据库 _id更新</span>
    user.doc('1acf1de95e48f2f310877a982d2de27f'<span style="color: rgba(0, 0, 0, 1)">).update({
      data: {
      age: </span>19<span style="color: rgba(0, 0, 0, 1)">,
      name: </span>'mm'<span style="color: rgba(0, 0, 0, 1)">
      }
    }).then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res)
      console.log(</span>'success'<span style="color: rgba(0, 0, 0, 1)">)
    }).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(err)
    })
},
select: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
    user.where({
      name: </span>'hh'<span style="color: rgba(0, 0, 0, 1)">
    }).get().then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res)
      console.log(</span>'success'<span style="color: rgba(0, 0, 0, 1)">)
    }).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(err)
    })
},
del: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)">(){
    user.doc(</span>'1acf1de95e48f2f310877a982d2de27f'<span style="color: rgba(0, 0, 0, 1)">).remove()
    .then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res)
      console.log(</span>'success'<span style="color: rgba(0, 0, 0, 1)">)
    }).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(err)
    })
},
sum: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
    wx.cloud.callFunction({
      name: </span>'sum',<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">云函数名</span>
<span style="color: rgba(0, 0, 0, 1)">      data: {
      a: </span>2<span style="color: rgba(0, 0, 0, 1)">,
      b: </span>3<span style="color: rgba(0, 0, 0, 1)">
      }
    }).then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res)
    }).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(err)
    });
},
getOpenId: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
    wx.cloud.callFunction({
      name: </span>'login'<span style="color: rgba(0, 0, 0, 1)">
    }).then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res)
    }).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(err)
    });
},
batchDel: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
    wx.cloud.callFunction({
      name: </span>'batchDelete'<span style="color: rgba(0, 0, 0, 1)">
    }).then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res)
    }).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.error(err)
    });
},
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 生命周期函数--监听页面加载
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onLoad: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (options) {

},

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 生命周期函数--监听页面初次渲染完成
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onReady: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {

},

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 生命周期函数--监听页面显示
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onShow: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {

},

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 生命周期函数--监听页面隐藏
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onHide: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {

},

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 生命周期函数--监听页面卸载
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onUnload: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {

},

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 页面相关事件处理函数--监听用户下拉动作
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onPullDownRefresh: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {

},

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 页面上拉触底事件的处理函数
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onReachBottom: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {

},

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 用户点击右上角分享
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onShareAppMessage: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {

}
})</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>personal.wxml</p>
<div class="cnblogs_code"><img id="code_img_closed_e8174d2a-bea1-4177-8f5d-08440346c00a" class="code_img_closed lazyload" alt="" data-src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_e8174d2a-bea1-4177-8f5d-08440346c00a" class="code_img_opened lazyload" style="display: none" alt="" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_e8174d2a-bea1-4177-8f5d-08440346c00a" class="cnblogs_code_hide">
<pre>&lt;view&gt;云数据库&lt;/view&gt;
&lt;button bindtap="insert"&gt;插入数据&lt;/button&gt;
&lt;button bindtap="update"&gt;更新数据&lt;/button&gt;
&lt;button bindtap="select"&gt;查询数据&lt;/button&gt;
&lt;button bindtap="del"&gt;删除数据&lt;/button&gt;
&lt;view&gt;云函数&lt;/view&gt;
&lt;button bindtap="sum"&gt;调用云函数sum&lt;/button&gt;
&lt;button bindtap="getOpenId"&gt;获取getOpenId&lt;/button&gt;
&lt;button bindtap="batchDel"&gt;批量删除&lt;/button&gt;</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p><img alt="" data-src="https://img2018.cnblogs.com/i-beta/1406035/202002/1406035-20200216163042633-38067230.png"></p>
<p>&nbsp;</p>
<h2>&nbsp;3、云存储</h2>
<h3>一、介绍</h3>
<p>云存储提供高可用、高稳定、强安全的云端存储服务,支持任意数量和形式的非结构化数据存储,如视频和图片,并在控制台进行可视化管理。云存储包含以下功能:</p>
<ul>
<li>存储管理:支持文件夹,方便文件归类。支持文件的上传、删除、移动、下载、搜索等,并可以查看文件的详情信息</li>
<li>权限设置:可以灵活设置哪些用户是否可以读写该文件夹中的文件,以保证业务的数据安全</li>
<li>上传管理:在这里可以查看文件上传历史、进度及状态</li>
<li>文件搜索:支持文件前缀名称及子目录文件的搜索</li>
<li>组件支持:支持在&nbsp;<code>image</code>、<code>audio</code>&nbsp;等组件中传入云文件 ID</li>
</ul>
<h3>二、使用</h3>
<p>(1、文件上传流程:</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1406035/202002/1406035-20200216165202824-199480918.png"></p>
<p>&nbsp;</p>
<p>&nbsp;(2、代码:</p>
<p>personal.wxml</p>
<div class="cnblogs_code"><img src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_7c6136e8-cd12-43d4-83e2-af6e3b7dc34c" class="code_img_opened lazyload" style="display: none" alt="" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_7c6136e8-cd12-43d4-83e2-af6e3b7dc34c" class="cnblogs_code_hide">
<pre>&lt;view&gt;云数据库&lt;/view&gt;
&lt;button bindtap="insert"&gt;插入数据&lt;/button&gt;
&lt;button bindtap="update"&gt;更新数据&lt;/button&gt;
&lt;button bindtap="select"&gt;查询数据&lt;/button&gt;
&lt;button bindtap="del"&gt;删除数据&lt;/button&gt;
&lt;view&gt;云函数&lt;/view&gt;
&lt;button bindtap="sum"&gt;调用云函数sum&lt;/button&gt;
&lt;button bindtap="getOpenId"&gt;获取getOpenId&lt;/button&gt;
&lt;button bindtap="batchDel"&gt;批量删除&lt;/button&gt;
&lt;view&gt;云存储&lt;/view&gt;
&lt;button bindtap="uploadImg"&gt;上传图片&lt;/button&gt;
&lt;button bindtap="getImg"&gt;获取图片&lt;/button&gt;
&lt;block wx:<span style="color: rgba(0, 0, 255, 1)">for</span>='{{images}}' wx:key='index'&gt;
&lt;image src="{{item.fileId}}"&gt;&lt;/image&gt;
&lt;button data-fileId="{{item.fileId}}" bindtap="downloadFile"&gt;文件下载&lt;/button&gt;
&lt;/block&gt;</pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p>personal.js</p>
<div class="cnblogs_code"><img id="code_img_closed_35b9dc3c-f211-4bd8-a6db-ff8ee62edf98" class="code_img_closed lazyload" alt="" data-src="http://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif"><img id="code_img_opened_35b9dc3c-f211-4bd8-a6db-ff8ee62edf98" class="code_img_opened lazyload" style="display: none" alt="" data-src="http://images.cnblogs.com/OutliningIndicators/ExpandedBlockStart.gif">
<div id="cnblogs_code_open_35b9dc3c-f211-4bd8-a6db-ff8ee62edf98" class="cnblogs_code_hide">
<pre><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
* 初始化数据库
* 用evn属性可以切换属性
* database({evn:test})
</span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
const db </span>=<span style="color: rgba(0, 0, 0, 1)"> wx.cloud.database();
const user </span>= db.collection("user"<span style="color: rgba(0, 0, 0, 1)">);
const cloudImage </span>= db.collection("image"<span style="color: rgba(0, 0, 0, 1)">);
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> pages/personal/personal.js</span>
<span style="color: rgba(0, 0, 0, 1)">Page({
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 页面的初始数据
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
data: {
    images: []
},
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 插入数据
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
insert: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
    user.add({
      data: {
      name: </span>'hh'<span style="color: rgba(0, 0, 0, 1)">,
      age: </span>20<span style="color: rgba(0, 0, 0, 1)">
      }
    }).then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 回调函数</span>
<span style="color: rgba(0, 0, 0, 1)">      console.log(res)
      wx.showToast({
      title: </span>'success'<span style="color: rgba(0, 0, 0, 1)">,
      })
    }).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">抓取错误</span>
<span style="color: rgba(0, 0, 0, 1)">      console.log(err)
    })
},
update: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
    user.doc(</span>'74b140b45e4513af0f0aab605928da00'<span style="color: rgba(0, 0, 0, 1)">).update({
      data: {
      age: </span>19<span style="color: rgba(0, 0, 0, 1)">,
      name: </span>'mm'<span style="color: rgba(0, 0, 0, 1)">
      }
    }).then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res)
      console.log(</span>'success'<span style="color: rgba(0, 0, 0, 1)">)
    }).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(err)
    })
},
del: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
    user.doc(</span>'0ec685215e45122d0f0ad2e55bb2ee69'<span style="color: rgba(0, 0, 0, 1)">).remove()
      .then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res)
      console.log(</span>'success'<span style="color: rgba(0, 0, 0, 1)">)
      }).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(err)
      })
},
select: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
    user.where({
      name: </span>'hh'<span style="color: rgba(0, 0, 0, 1)">
    }).get().then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res)
      console.log(</span>'success'<span style="color: rgba(0, 0, 0, 1)">)
    }).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(err)
    })
},
sum: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
    wx.cloud.callFunction({
      name: </span>'sum',<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">云函数名</span>
<span style="color: rgba(0, 0, 0, 1)">      data: {
      a: </span>2<span style="color: rgba(0, 0, 0, 1)">,
      b: </span>3<span style="color: rgba(0, 0, 0, 1)">
      }
    }).then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res)
    }).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(err)
    });
},
getOpenId: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
    wx.cloud.callFunction({
      name: </span>'login'<span style="color: rgba(0, 0, 0, 1)">
    }).then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res)
    }).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(err)
    });
},
batchDel: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
    wx.cloud.callFunction({
      name: </span>'batchDelete'<span style="color: rgba(0, 0, 0, 1)">
    }).then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(res)
    }).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.error(err)
    });
},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">上传图片</span>
uploadImg: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
    wx.chooseImage({
      count: </span>1<span style="color: rgba(0, 0, 0, 1)">,
      sizeType: [</span>'original', 'compressed'<span style="color: rgba(0, 0, 0, 1)">],
      sourceType: [</span>'album', 'camera'<span style="color: rgba(0, 0, 0, 1)">],
      success(res) {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> tempFilePath可以作为img标签的src属性显示图片</span>
      const tempFilePaths =<span style="color: rgba(0, 0, 0, 1)"> res.tempFilePaths;
      wx.cloud.uploadFile({
          cloudPath: </span><span style="color: rgba(0, 0, 255, 1)">new</span> Date().getTime() + '.png', <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 为了确保不重名</span>
          filePath: tempFilePaths, <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 文件路径,因为tempFilePaths是一个数组</span>
          success: res =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> get resource ID</span>
<span style="color: rgba(0, 0, 0, 1)">            console.log(res.fileID)
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">存储数据到云数据库</span>
<span style="color: rgba(0, 0, 0, 1)">            cloudImage.add({
            data: {
                fileId: res.fileID
            }
            }).then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            console.log(res)
            }).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            console.error(err)
            })
          },
          fail: err </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> handle error</span>
<span style="color: rgba(0, 0, 0, 1)">          }
      })
      }
    })
},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 获取图片</span>
getImg: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {
    wx.cloud.callFunction({
      name: </span>'login'<span style="color: rgba(0, 0, 0, 1)">
    }).then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 查询</span>
<span style="color: rgba(0, 0, 0, 1)">      cloudImage.where({ _openid: res.result.openid })
      .get().then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
          </span><span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.setData({
            images: res.data
          })
      })
    }).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      console.log(err)
    });
},
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 文件下载</span>
downloadFile: <span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (event) {
    </span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">* event.target.dataset.fileid在wxml遍历数据时候设置的
   * data-fileId="{{item.fileId}}"
    </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
    console.log(event.target.dataset.fileid)
    wx.cloud.downloadFile({
      fileID: event.target.dataset.fileid,
      success: res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> get temp file path</span>
<span style="color: rgba(0, 0, 0, 1)">      console.log(res.tempFilePath)
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">res.tempFilePath是响应回来的零食路径</span>
<span style="color: rgba(0, 0, 0, 1)">      wx.saveImageToPhotosAlbum({
          filePath: res.tempFilePath,
          success(res) {
            console.log(res)
            wx.showToast({
            title: </span>'保存成功!'<span style="color: rgba(0, 0, 0, 1)">,
            })
          },
          fail(err) {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 保存未授权</span>
<span style="color: rgba(0, 0, 0, 1)">            console.error(err)
            </span><span style="color: rgba(0, 0, 255, 1)">if</span> (err.errMsg === "saveImageToPhotosAlbum:fail:auth denied" || err.errMsg === "saveImageToPhotosAlbum:fail auth deny"<span style="color: rgba(0, 0, 0, 1)">) {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这边微信做过调整,必须要在按钮中触发,因此需要在弹框回调中进行调用</span>
<span style="color: rgba(0, 0, 0, 1)">            wx.showModal({
                title: </span>'提示'<span style="color: rgba(0, 0, 0, 1)">,
                content: </span>'需要您授权保存相册'<span style="color: rgba(0, 0, 0, 1)">,
                showCancel: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
                success: modalSuccess </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
                  wx.openSetting({
                  success(settingdata) {
                      console.log(</span>"settingdata"<span style="color: rgba(0, 0, 0, 1)">, settingdata)
                      </span><span style="color: rgba(0, 0, 255, 1)">if</span> (settingdata.authSetting['scope.writePhotosAlbum'<span style="color: rgba(0, 0, 0, 1)">]) {
                        wx.showModal({
                        title: </span>'提示'<span style="color: rgba(0, 0, 0, 1)">,
                        content: </span>'获取权限成功,再次点击图片即可保存'<span style="color: rgba(0, 0, 0, 1)">,
                        showCancel: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
                        })
                      } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
                        wx.showModal({
                        title: </span>'提示'<span style="color: rgba(0, 0, 0, 1)">,
                        content: </span>'获取权限失败,将无法保存到相册哦~'<span style="color: rgba(0, 0, 0, 1)">,
                        showCancel: </span><span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">,
                        })
                      }
                  },
                  fail(failData) {
                      console.log(</span>"failData"<span style="color: rgba(0, 0, 0, 1)">, failData)
                  },
                  complete(finishData) {
                      console.log(</span>"finishData"<span style="color: rgba(0, 0, 0, 1)">, finishData)
                  }
                  })
                }
            })
            }
          }
      })
      },
      fail: err </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> handle error</span>
<span style="color: rgba(0, 0, 0, 1)">      }
    })
},
</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 生命周期函数--监听页面加载
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onLoad: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> (options) {

},

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 生命周期函数--监听页面初次渲染完成
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onReady: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {

},

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 生命周期函数--监听页面显示
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onShow: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {

},

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 生命周期函数--监听页面隐藏
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onHide: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {

},

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 生命周期函数--监听页面卸载
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onUnload: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {

},

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 页面相关事件处理函数--监听用户下拉动作
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onPullDownRefresh: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {

},

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 页面上拉触底事件的处理函数
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onReachBottom: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {

},

</span><span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">*
   * 用户点击右上角分享
   </span><span style="color: rgba(0, 128, 0, 1)">*/</span><span style="color: rgba(0, 0, 0, 1)">
onShareAppMessage: </span><span style="color: rgba(0, 0, 255, 1)">function</span><span style="color: rgba(0, 0, 0, 1)"> () {

}
})</span></pre>
</div>
<span class="cnblogs_code_collapse">View Code</span></div>
<p><img alt="" data-src="https://img2018.cnblogs.com/i-beta/1406035/202002/1406035-20200216165620575-1549903213.png"></p>
<p>&nbsp;<img src="https://img2018.cnblogs.com/i-beta/1406035/202002/1406035-20200216165928984-651408446.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
</div><br><br>
来源:https://www.cnblogs.com/hhmm99/p/12316872.html
頁: [1]
查看完整版本: 微信小程序入门笔记-使用云开发(4)