微信小程序入门笔记-使用云开发(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> 二、使用</h3>
<p>(1、使用之前把页面创建好(我创建了home和personal):</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1406035/202002/1406035-20200216152533894-1594441430.png"></p>
<p> </p>
<p>(2、配置app.json</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1406035/202002/1406035-20200216153611479-1651840758.png"></p>
<p> </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=><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=><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 =><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 =><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 =><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 =><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 =><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 =><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)"><</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span>云数据库<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">view</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 128, 1)">2</span> <span style="color: rgba(0, 0, 255, 1)"><</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)">></span>插入数据<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 128, 1)">3</span> <span style="color: rgba(0, 0, 255, 1)"><</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)">></span>更新数据<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 128, 1)">4</span> <span style="color: rgba(0, 0, 255, 1)"><</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)">></span>查询数据<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 1)">></span>
<span style="color: rgba(0, 128, 128, 1)">5</span> <span style="color: rgba(0, 0, 255, 1)"><</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)">></span>删除数据<span style="color: rgba(0, 0, 255, 1)"></</span><span style="color: rgba(128, 0, 0, 1)">button</span><span style="color: rgba(0, 0, 255, 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-20200216155108948-1309522621.png"></p>
<h2>2、云函数</h2>
<h3> 一、介绍</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> </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) =><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) =><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) =><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> <img src="https://img2018.cnblogs.com/i-beta/1406035/202002/1406035-20200216163739139-1429026873.png"></p>
<p> </p>
<p> </p>
<p> 页面代码:</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>=><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=><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>=><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 =><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>=><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 =><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>=><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 =><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>=><span style="color: rgba(0, 0, 0, 1)"> {
console.log(res)
}).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =><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>=><span style="color: rgba(0, 0, 0, 1)"> {
console.log(res)
}).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =><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>=><span style="color: rgba(0, 0, 0, 1)"> {
console.log(res)
}).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =><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><view>云数据库</view>
<button bindtap="insert">插入数据</button>
<button bindtap="update">更新数据</button>
<button bindtap="select">查询数据</button>
<button bindtap="del">删除数据</button>
<view>云函数</view>
<button bindtap="sum">调用云函数sum</button>
<button bindtap="getOpenId">获取getOpenId</button>
<button bindtap="batchDel">批量删除</button></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> </p>
<h2> 3、云存储</h2>
<h3>一、介绍</h3>
<p>云存储提供高可用、高稳定、强安全的云端存储服务,支持任意数量和形式的非结构化数据存储,如视频和图片,并在控制台进行可视化管理。云存储包含以下功能:</p>
<ul>
<li>存储管理:支持文件夹,方便文件归类。支持文件的上传、删除、移动、下载、搜索等,并可以查看文件的详情信息</li>
<li>权限设置:可以灵活设置哪些用户是否可以读写该文件夹中的文件,以保证业务的数据安全</li>
<li>上传管理:在这里可以查看文件上传历史、进度及状态</li>
<li>文件搜索:支持文件前缀名称及子目录文件的搜索</li>
<li>组件支持:支持在 <code>image</code>、<code>audio</code> 等组件中传入云文件 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> </p>
<p> (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><view>云数据库</view>
<button bindtap="insert">插入数据</button>
<button bindtap="update">更新数据</button>
<button bindtap="select">查询数据</button>
<button bindtap="del">删除数据</button>
<view>云函数</view>
<button bindtap="sum">调用云函数sum</button>
<button bindtap="getOpenId">获取getOpenId</button>
<button bindtap="batchDel">批量删除</button>
<view>云存储</view>
<button bindtap="uploadImg">上传图片</button>
<button bindtap="getImg">获取图片</button>
<block wx:<span style="color: rgba(0, 0, 255, 1)">for</span>='{{images}}' wx:key='index'>
<image src="{{item.fileId}}"></image>
<button data-fileId="{{item.fileId}}" bindtap="downloadFile">文件下载</button>
</block></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>=><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 =><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>=><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 =><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>=><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 =><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>=><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 =><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>=><span style="color: rgba(0, 0, 0, 1)"> {
console.log(res)
}).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =><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>=><span style="color: rgba(0, 0, 0, 1)"> {
console.log(res)
}).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =><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>=><span style="color: rgba(0, 0, 0, 1)"> {
console.log(res)
}).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =><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 =><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>=><span style="color: rgba(0, 0, 0, 1)"> {
console.log(res)
}).</span><span style="color: rgba(0, 0, 255, 1)">catch</span>(err =><span style="color: rgba(0, 0, 0, 1)"> {
console.error(err)
})
},
fail: err </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)"> 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>=><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>=><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 =><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>=><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>=><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>=><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> <img src="https://img2018.cnblogs.com/i-beta/1406035/202002/1406035-20200216165928984-651408446.png"></p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
<p> </p>
</div><br><br>
来源:https://www.cnblogs.com/hhmm99/p/12316872.html
頁:
[1]