引言
熟悉uni-app的人應(yīng)該都知道,uni-app并未對微信小程序云函數(shù)(本文統(tǒng)稱云函數(shù))進(jìn)行相應(yīng)的適配衙传。但是俐巴,如果我們在某些業(yè)務(wù)場景的下需要使用云函數(shù)呢?我們知道牵囤,云函數(shù)可以復(fù)制到微信開發(fā)者工具,這樣的話我們不得不每次編譯一次就手動(dòng)復(fù)制一次滞伟,不得不說麻煩至極揭鳞。本文就問題做出以下解決方案。
本文環(huán)境
- Hbuilder X
- 微信開發(fā)者工具
創(chuàng)建云函數(shù)目錄
首先梆奈,我們需要在uni-app項(xiàng)目文件夾下野崇,創(chuàng)建一個(gè)云函數(shù)目錄,路徑隨意亩钟,我這里是functions
乓梨。然后先隨便在里面放一些文件,這里以new_file.css
為例清酥。
修改manifest.json
在uni-app根目錄下扶镀,修改manifest.json
中的微信小程序項(xiàng),結(jié)構(gòu)如下
"mp-weixin" : {
/* 小程序特有相關(guān) */
"appid" : "wxd7de467f6e6cf741",
"cloudfunctionRoot": "./functions/", // 這一行就是標(biāo)記云函數(shù)目錄的字段
"setting" : {
"urlCheck" : false
},
"usingComponents" : true
}
編寫vue.config.js
- 我們在項(xiàng)目根目錄創(chuàng)建
vue.config.js
文件 - 寫入以下內(nèi)容(如路徑不一樣請做相應(yīng)適配)
const path = require('path')
const CopyWebpackPlugin = require('copy-webpack-plugin')
module.exports = {
configureWebpack: {
plugins: [
new CopyWebpackPlugin([
{
from: path.join(__dirname, 'functions'),
to: path.join(__dirname, 'unpackage/dist', process.env.NODE_ENV === 'production' ? 'build' : 'dev', process.env.UNI_PLATFORM, 'functions')
}
])
]
}
}
- 編譯運(yùn)行
發(fā)現(xiàn)提示如下內(nèi)容
說明未安裝copy-webpack-plugin
插件焰轻,我們手動(dòng)安裝一下臭觉。
然后編譯運(yùn)行,發(fā)現(xiàn)微信開發(fā)者工具里面出現(xiàn)以下內(nèi)容辱志。
截止目前蝠筑,已打通Hbuilder X到微信開發(fā)者工具的自動(dòng)復(fù)制,即已解決本文的核心內(nèi)容揩懒。以下為進(jìn)一步測試什乙。
創(chuàng)建云函數(shù)
我們在云函數(shù)根目錄上右鍵,在右鍵菜單中已球,可以選擇創(chuàng)建一個(gè)新的 Node.js 云函數(shù)臣镣,我們將該云函數(shù)命名為check。開發(fā)者工具在本地創(chuàng)建出云函數(shù)目錄和入口 index.js 文件智亮,同時(shí)在線上環(huán)境中創(chuàng)建出對應(yīng)的云函數(shù)退疫。創(chuàng)建成功后,工具會(huì)提示是否立即本地安裝依賴鸽素,確定后工具會(huì)自動(dòng)安裝 wx-server-sdk褒繁。我們會(huì)看到以下內(nèi)容。
創(chuàng)建好后將其同步復(fù)制到uni-app項(xiàng)目馍忽,即可為以后自動(dòng)同步行方便棒坏,又可避免在輸出文件夾中云函數(shù)的意外丟失燕差。至此,相關(guān)文件編寫工作轉(zhuǎn)至Hbuilder X
坝冕,云函數(shù)上傳部署依舊在微信開發(fā)者工具徒探。
編寫云函數(shù)
默認(rèn)的云函數(shù)只是一個(gè)返回用戶基本數(shù)據(jù)的內(nèi)容,我們將其修改至滿足我們的業(yè)務(wù)需求喂窟,以內(nèi)容安全云調(diào)用為例测暗。
在云函數(shù)文件中寫入以下內(nèi)容
// 云函數(shù)入口文件
const cloud = require('wx-server-sdk')
cloud.init()
// 云函數(shù)入口函數(shù)
exports.main = async(event, context) => {
try {
console.log('待檢測文本:' + event.content);
let result = await cloud.openapi.security.msgSecCheck({
content: event.content
})
console.log('result:' + JSON.stringify(result));
if (result && result.errCode.toString() === '87014') {
return {
code: 300,
msg: '內(nèi)容含有違法違規(guī)內(nèi)容',
data: result
}
} else {
return {
code: 200,
msg: 'ok',
data: result
}
}
} catch (err) {
if (err.errCode.toString() === '87014') {
return {
code: 300,
msg: '內(nèi)容含有違法違規(guī)內(nèi)容',
data: err
}
}
return {
code: 400,
msg: '調(diào)用security接口異常',
data: err
}
}
}
權(quán)限申明
在函數(shù)目錄下,創(chuàng)建一個(gè)config.json
,文檔說會(huì)自動(dòng)創(chuàng)建磨澡,但是我實(shí)際操作時(shí)未自動(dòng)創(chuàng)建碗啄。config.json
內(nèi)容如下。
{
"permissions": {
"openapi": [
"security.msgSecCheck"
]
}
}
然后在函數(shù)目錄右鍵稳摄,上傳并部署稚字。
小程序調(diào)用云函數(shù)
wx.cloud.init()
wx.cloud.callFunction({
name: 'check',
data: {
"content": this.contents.join()
}
}).then(res => {
console.log(res.result)
if (res.result.code == 300) {
uni.showModal({
title: "溫馨提示",
content: "你所輸入的內(nèi)容可能含有違法違規(guī)內(nèi)容,不支持進(jìn)行下一步操作"
})
return
} else {
... // 你要進(jìn)行的操作
}
})
效果展示
本文由 指尖魔法屋 首發(fā)厦酬,轉(zhuǎn)載必須申明原指尖魔法屋來源及源地址胆描! 聯(lián)系我請轉(zhuǎn)至指尖魔法屋!聯(lián)系我請轉(zhuǎn)至指尖魔法屋仗阅!聯(lián)系我請轉(zhuǎn)至指尖魔法屋昌讲!