取關(guān)的股票從數(shù)據(jù)庫(kù)中刪除
小程序客戶(hù)端只能根據(jù)主鍵_id刪除一行數(shù)據(jù),根據(jù)我的設(shè)計(jì)只能根據(jù)_openid和_id取關(guān)。
要取得_openid也需要云函數(shù)誊垢,_openid的的獲取在小程序段也比較復(fù)雜忍弛。因此用云函數(shù)操作數(shù)據(jù)庫(kù)是不可避免的了。
《白小云》先放一邊蹋笼,學(xué)習(xí)一下云函數(shù)的使用
獲取openid
在app.json里創(chuàng)建一個(gè)測(cè)試頁(yè)面
"pages": [
"pages/cfun/cfun",
在cfun.wxml里添加一個(gè)按鈕
<!--pages/cfun/cfun.wxml-->
<button bindtap="getOpenid">登陸并獲取openid</button>
用云開(kāi)發(fā)案例提供的login云函數(shù)
// 云函數(shù)模板
// 部署:在 cloud-functions/login 文件夾右擊選擇 “上傳并部署”
const cloud = require('wx-server-sdk')
// 初始化 cloud
cloud.init({
// API 調(diào)用都保持和云函數(shù)當(dāng)前所在環(huán)境一致
env: cloud.DYNAMIC_CURRENT_ENV
})
/**
* 這個(gè)示例將經(jīng)自動(dòng)鑒權(quán)過(guò)的小程序用戶(hù) openid 返回給小程序端
*
* event 參數(shù)包含小程序端調(diào)用傳入的 data
*
*/
exports.main = (event, context) => {
console.log(event)
console.log(context)
// 可執(zhí)行其他自定義邏輯
// console.log 的內(nèi)容可以在云開(kāi)發(fā)云函數(shù)調(diào)用日志查看
// 獲取 WX Context (微信調(diào)用上下文),包括 OPENID躁垛、APPID剖毯、及 UNIONID(需滿(mǎn)足 UNIONID 獲取條件)等信息
const wxContext = cloud.getWXContext()
return {
event,
openid: wxContext.OPENID,
appid: wxContext.APPID,
unionid: wxContext.UNIONID,
env: wxContext.ENV,
}
}
cfun編寫(xiě)getOpenid事件函數(shù)調(diào)用云函數(shù)login
const app = getApp();
getOpenid(){
console.log("in getOpenid");
wx.cloud.callFunction({
name:"login", //云函數(shù)名稱(chēng)
data:{} //云函數(shù)參數(shù)
})
.then(res=>{
let myid = res.result.openid //openid
console.log(myid);
//openid 保存到全局變量里
app.globalData.myOpenid = myid;
console.log("app.globalData.myOpenid",app.globalData.myOpenid);
})
.catch(err=>{
console.log(err);
})
}
獲取openid移植到我的頁(yè)面獲取
此getOpenid()函數(shù)拷貝到我的頁(yè)面my.js用來(lái)獲取用戶(hù)昵稱(chēng)頭像和openid
現(xiàn)在研究以下云函數(shù)操作數(shù)據(jù)庫(kù)的問(wèn)題
小程序的前端對(duì)數(shù)據(jù)庫(kù)的操作有許多的限制,比如批量刪除教馆,云函數(shù)就沒(méi)有這些限制逊谋。
對(duì)數(shù)據(jù)庫(kù)的操作無(wú)非就是增刪改查(insert、delete土铺、update胶滋、select、count)舒憾,封裝一個(gè)云函數(shù)exesql()能執(zhí)行對(duì)數(shù)據(jù)庫(kù)的增刪改查镀钓。
在項(xiàng)目的cloudfunctions目錄下創(chuàng)建云函數(shù)exesql
index.js 里輸入以下代碼:
//exesql云函數(shù)入口文件
const cloud = require('wx-server-sdk')
cloud.init({
// API 調(diào)用都保持和云函數(shù)當(dāng)前所在環(huán)境一致
env: cloud.DYNAMIC_CURRENT_ENV
})
const db = cloud.database()
const _ = db.command
// 云函數(shù)入口函數(shù)
exports.main = async (event, context) => {
const targetDB = db.collection(event.db)
try {
if (event.type == "insert") {
return await targetDB.add({
data: event.data
})
}
if (event.type == "update") {
return await targetDB.doc(event.indexKey).update({
data: event.data
})
}
if (event.type == "delete") {
return await targetDB.where(event.condition).remove()
}
if (event.type == "select") {
return await targetDB.where(event.condition)
.skip(20 * event.skip)
.limit(event.limit)
.get()
}
} catch (e) {
console.error(e)
}
}
在小程序端調(diào)用一下云函數(shù)
打開(kāi)cfun.wxml 再增加一個(gè)按鈕
<button bindtap="exesql">執(zhí)行云函數(shù)exesql</button>
打開(kāi)cfun.js增加tap事件
exesql(e){
//執(zhí)行云函數(shù)sql
wx.cloud.callFunction({
name: 'exesql',
data: {
type: "insert", //指定操作是insert
db: "guanzu", //指定操作的數(shù)據(jù)表
data: { //指定insert的數(shù)據(jù)
code:"399300",
name:"滬深300"
}
},
success: res => {
console.log('[云函數(shù)] [insertDB] 已增加信息' + res.result._id)
},
fail: err => {
console.error('[云函數(shù)] [insertDB] 增加失敗', err)
}
})
},
OK執(zhí)行成功!镀迂!好激動(dòng)
取關(guān)的股票從數(shù)據(jù)庫(kù)刪除終于可以了代碼如下:
deleteData(gpid) {
//執(zhí)行云函數(shù)sql
wx.cloud.callFunction({
name: 'exesql',
data: {
type: "delete", //指定操作是delete
db: "guanzu", //指定操作的數(shù)據(jù)表
condition: { code: gpid }, //where條件
},
success: res => {
console.log('[云函數(shù)] [deleteDB] 已刪除' + res)
},
fail: err => {
console.error('[云函數(shù)] [deleteDB] 刪除失敗', err)
}
})
},