梦系篮涯 發表於 2019-12-11 13:43:00

uni-app使用微信小程序云函数的步骤

<h2 id="item-3">创建云函数目录</h2>
<p>首先,我们需要在uni-app项目文件夹下,创建一个云函数目录,路径随意,我这里是<code>functions</code>。然后先随便在里面放一些文件,这里以<code>new_file.css</code>为例。(放文件的原因是:确保编译成小程序后cloudfunctions文件夹存在。如果该文件夹下没有文件,默认是不会在微信小程序开发平台中显示该文件夹的。)</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1846907/201912/1846907-20191211132808809-1027694466.png"></p>
<h2 id="item-4">修改<code>manifest.json</code></h2>
<p>在uni-app根目录下,修改<code>manifest.json</code>中的微信小程序项,结构如下</p>
<div class="cnblogs_code">
<pre>"mp-weixin"<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>
      "appid" : "wxd7de467f6e6cf741"<span style="color: rgba(0, 0, 0, 1)">,
      </span>"cloudfunctionRoot": "./functions/", <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)"> 这一行就是标记云函数目录的字段</span>
      "setting"<span style="color: rgba(0, 0, 0, 1)"> : {
            </span>"urlCheck" : <span style="color: rgba(0, 0, 255, 1)">false</span><span style="color: rgba(0, 0, 0, 1)">
      },
      </span>"usingComponents" : <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">
    }</span></pre>
</div>
<h2 id="item-5">编写<code>vue.config.js</code></h2>
<ol>
<li>我们在项目根目录创建<code>vue.config.js</code>文件</li>
<li>写入以下内容(如路径不一样请做相应适配)</li>
</ol>
<div class="cnblogs_code">
<pre>const path = require('path'<span style="color: rgba(0, 0, 0, 1)">)
const CopyWebpackPlugin </span>= require('copy-webpack-plugin'<span style="color: rgba(0, 0, 0, 1)">)

module.exports </span>=<span style="color: rgba(0, 0, 0, 1)"> {
    configureWebpack: {
      plugins: [
            </span><span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> CopyWebpackPlugin([
                {
                  from: path.join(__dirname, </span>'functions'<span style="color: rgba(0, 0, 0, 1)">),
                  to: path.join(__dirname, </span>'unpackage/dist', process.env.NODE_ENV === 'production' ? 'build' : 'dev', process.env.UNI_PLATFORM, 'functions'<span style="color: rgba(0, 0, 0, 1)">)
                }
            ])
      ]
    }
}</span></pre>
</div>
<ol>
<li>
<h2>编译运行</h2>
</li>
</ol>
<p>发现提示如下内容</p>
<p><img src="https://img2018.cnblogs.com/common/1846907/201912/1846907-20191211133047159-1975276820.png"></p>
<p>说明未安装<code>copy-webpack-plugin</code>插件,我们手动安装一下。</p>
<p><img src="https://img2018.cnblogs.com/common/1846907/201912/1846907-20191211133115977-2087233374.png"></p>
<p>然后编译运行,发现微信开发者工具里面出现以下内容。</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1846907/201912/1846907-20191211133239776-1613754057.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;截止目前,已打通Hbuilder X到微信开发者工具的自动复制,即已解决本文的核心内容。以下为进一步测试。</p>
<h2 id="item-6">创建云函数</h2>
<p>(在微信开发者工具操作)我们在云函数根目录上右键,在右键菜单中,可以选择创建一个新的 Node.js 云函数,我们将该云函数命名为check。开发者工具在本地创建出云函数目录和入口 index.js 文件,同时在线上环境中创建出对应的云函数。创建成功后,工具会提示是否立即本地安装依赖,确定后工具会自动安装 wx-server-sdk。我们会看到以下内容。</p>
<p>&nbsp;</p>
<p>创建好后将其同步复制到uni-app项目,即可为以后自动同步行方便,又可避免在输出文件夹中云函数的意外丢失。至此,相关文件编写工作转至<code>Hbuilder X</code>,云函数上传部署依旧在微信开发者工具。</p>
<p><img src="https://img2018.cnblogs.com/common/1846907/201912/1846907-20191211133618810-1779440473.png"></p>
<h2 id="item-7">编写云函数</h2>
<p>默认的云函数只是一个返回用户基本数据的内容,我们将其修改至满足我们的业务需求,以内容安全云调用为例。</p>
<p>在云函数文件中写入以下内容</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()

</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)"> {
    console.log(</span>'待检测文本:' +<span style="color: rgba(0, 0, 0, 1)"> event.content);
    let result </span>=<span style="color: rgba(0, 0, 0, 1)"> await cloud.openapi.security.msgSecCheck({
      content: event.content
    })
    console.log(</span>'result:' +<span style="color: rgba(0, 0, 0, 1)"> JSON.stringify(result));

    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (result &amp;&amp; result.errCode.toString() === '87014'<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)"> {
      code: </span>300<span style="color: rgba(0, 0, 0, 1)">,
      msg: </span>'内容含有违法违规内容'<span style="color: rgba(0, 0, 0, 1)">,
      data: result
      }
    } </span><span style="color: rgba(0, 0, 255, 1)">else</span><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)"> {
      code: </span>200<span style="color: rgba(0, 0, 0, 1)">,
      msg: </span>'ok'<span style="color: rgba(0, 0, 0, 1)">,
      data: result
      }
    }

} </span><span style="color: rgba(0, 0, 255, 1)">catch</span><span style="color: rgba(0, 0, 0, 1)"> (err) {
    </span><span style="color: rgba(0, 0, 255, 1)">if</span> (err.errCode.toString() === '87014'<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)"> {
      code: </span>300<span style="color: rgba(0, 0, 0, 1)">,
      msg: </span>'内容含有违法违规内容'<span style="color: rgba(0, 0, 0, 1)">,
      data: err
      }
    }
    </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> {
      code: </span>400<span style="color: rgba(0, 0, 0, 1)">,
      msg: </span>'调用security接口异常'<span style="color: rgba(0, 0, 0, 1)">,
      data: err
    }
}
}</span></pre>
</div>
<h2 id="item-8">权限申明</h2>
<p>在函数目录下,创建一个<code>config.json</code>,文档说会自动创建,但是实际操作时可能不会自动创建。<code>config.json</code>内容如下。</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1846907/201912/1846907-20191211134023756-1788793978.png"></p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">{
    </span>"permissions"<span style="color: rgba(0, 0, 0, 1)">: {
      </span>"openapi"<span style="color: rgba(0, 0, 0, 1)">: [
            </span>"security.msgSecCheck"             <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)">      ]
    }
}</span></pre>
</div>
<p>b</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1846907/201912/1846907-20191211162654925-1355587760.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<h2 id="item-9">小程序调用云函数</h2>
<div class="cnblogs_code">
<pre>                wx.cloud.init()                              <span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">调用前需先调用init</span>
<span style="color: rgba(0, 0, 0, 1)">                wx.cloud.callFunction({
                  name: </span>'check'<span style="color: rgba(0, 0, 0, 1)">,
                  data: {
                        </span>"content": <span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">.contents.join()
                  }
                }).then(res </span>=&gt;<span style="color: rgba(0, 0, 0, 1)"> {
                  console.log(res.result)
                  </span><span style="color: rgba(0, 0, 255, 1)">if</span> (res.result.code == 300<span style="color: rgba(0, 0, 0, 1)">) {
                        uni.showModal({
                            title: </span>"温馨提示"<span style="color: rgba(0, 0, 0, 1)">,
                            content: </span>"你所输入的内容可能含有违法违规内容,不支持进行下一步操作"<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)">
                  } </span><span style="color: rgba(0, 0, 255, 1)">else</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)">                  }
                })</span></pre>
</div>
<h2>效果展示</h2>
<p><img src="https://img2018.cnblogs.com/i-beta/1846907/201912/1846907-20191211134216633-978162310.png"></p>
<h2>如果第一次出现错误:&nbsp;invalid scope 没有权限,请先开通云服务</h2>
<p>这是因为 小程序开发选择了云服务开发,但是没有开通云服务导致,点击微信开发工具上方的 云开发按钮,开通云开发。</p>
<p><img src="https://img2018.cnblogs.com/common/1846907/201912/1846907-20191213145834926-1085250142.png"></p>
<p>新建云函数(上床并部署后会自动出现)</p>
<p><img src="https://img2018.cnblogs.com/i-beta/1846907/201912/1846907-20191213145958192-1624048580.png"></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>非原创,原文地址:https://www.thinkmoon.cn/20191022/cid=474.html</p>

</div>
<div id="MySignature" role="contentinfo">
    有问题可直接留言,望各位与我都可以成为技术大牛。<br><br>
来源:https://www.cnblogs.com/xhxdd/p/12022051.html
頁: [1]
查看完整版本: uni-app使用微信小程序云函数的步骤