小程序代碼中無法直接修改他人創建的數據記錄
例如:資料庫表中的_openid欄位是自動生成的,哪個用戶創建的記錄這個openid就是用戶的openid,雲資料庫的許可權分配也是根據openid來進行的。
解決方案:
第一步:創建雲函數,在函數中編寫修改資料庫的操作代碼
//
雲函數入口文件
const
cloud
=
require('wx-server-sdk')
cloud.init()
const
db
=
cloud.database()
const
_
=
db.command
//
雲函數入口函數
exports.main
=
async
(event,
context)
=>
{
try
{
return
await
db.collection('表名').doc('id欄位').update({
//
data
傳入需要局部更新的數據
data:
{
isHave:
true
}
})
}
catch
(e)
{
console.error(e)
}
}
提示:小程序傳入雲函數的參數在event中,使用方法:event.參數名稱。
第二步:將雲函數上傳並部署到雲
提示:右鍵創建的雲函數--選擇「上傳並部署」
第三步:小程序調用該函數
wx.cloud.callFunction({
//
雲函數名稱
name:
'雲函數名稱(即創建雲函數時的名稱)',
//
傳給雲函數的參數
data:
{
a:
1
},
success:
function
(res)
{
console.log(res)
},
fail:
console.error
})
以上所述是小編給大家介紹的微信小程序雲開發修改雲資料庫中的數據方法詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
您可能感興趣的文章:小程序雲開發獲取不到資料庫記錄的解決方法小程序雲開發實現資料庫非同步操作同步化微信小程序雲開發之資料庫操作微信小程序雲開發實現雲資料庫讀寫許可權微信小程序雲開發之使用雲資料庫微信小程序雲開發(資料庫)詳解解決微信小程序雲開發中獲取資料庫的內容為空的方法詳解小程序雲開發資料庫
『貳』 微信小程序頭像怎麼改
主要步驟
獲取用戶頭像
圖片模板
圖片合成
一、獲取用戶頭像
製作自定義頭像的第一步就是先選擇圖片。在【海豚趣圖】的交互設計中,用戶有三種選擇圖片的方式:微信頭像、本地相冊和相機拍攝。獲取用戶頭像的產品設計如下圖所示:
1、由於微信官方不再支持通過 wx.getUserInfo 介面來獲取用戶信息,我們必須通過使用button組件並將open-type指定為getUserInfo類型來獲取或展示用戶信息。
上圖中彈出底部菜單的交互方式無法通過wx.showActionSheet來實現(因為該介面只能指定字元串文本,不能使用button,navigator等組件)。
因此,只能通過自定義actionSheet組件來實現以上功能。
mmp-action-sheet 組件
以下是 mmp-action-sheet 組件的代碼。
index.wxml
2、通過slot在 action-sheet 中插入自定義的內容,比如button、navigator等。
index.wxss
index.js
組件只有兩個參數:
actionSheetStatus指定組件的初始展示狀態,默認為false,表示不顯示組件。
closeText指定關閉按鈕的名字,默認為取消。
index.json
接下來在頁面中調用組件,在組件中插入了3個button組件來實現來獲取用戶頭像:
以上我們通過自定義組件mmp-action-sheet就解決了原生的 actionsheet 無法指定button,從而無法獲取用戶微信頭像的問題。
該組件我已經發布到npm包,需要用到的同學可以通過npm安裝,也可以在github上查看源碼和使用文檔。
二、圖片模板
有了原圖,接下來我們需要選擇圖片模板。如果模板數量不多或者模板變化不頻繁,我們可以直接把模板放在本地。鑒於我提供的模板比較多,放在本地會增大小程序源碼的大小,我把模板上傳到了小程序的雲存儲中,通過雲函數來動態獲取圖片模板,方便以後模板擴展。
雲函數tpl的代碼如下:
頁面中調用雲函數拉取模板:
三、問題
到這里模板的獲取邏輯已經沒有問題了,但在開發過程中遇到了一個問題。模板圖片的鏈接我使用的是雲文件ID,當有大量圖片並行載入的時候,只有部分圖片能夠顯示,我看了一下dom節點其實都已經存在了,image的src的地址也都是正確的。
我猜測可能是對微信雲存儲並發請求過多導致的(有知道的同學可以告知),因為我試了一下將雲文件ID換成正常的HTTPS的鏈接是沒問題的。
由此可知,可以想到有三種可行的解決方案:
2、將圖片模板存儲到外部OSS,使用https協議的鏈接。
3、使用wx.getTempFileURL用雲文件 ID 換取真實鏈接,也就是https形式的鏈接。
4、控制圖的並行載入數量。我的實踐是將並行載入數量控制在20,當用戶滾動的時候再發起下一次請求。
『叄』 微信小程序同步微信公眾號文章(二)
首先確認是否有相應的介面許可權,這里主要用到獲取素材相關的介面,可以看到對應介面文檔,個人號還是有對應許可權的。
在新增了永久素材後,開發者可以分類型獲取永久素材的列表:
1、獲取永久素材的列表,也包含租廳跡公眾號在公眾平台官網素材管理模塊中新建的圖文消息、語音、視伏芹頻等素材 。
2、臨時素材無法通過本介面獲取。
3、調用該介面需https協議。
實現的邏輯還是比較簡單的,具體分兩個步驟:
1、獲取公眾號的access_token
獲取公眾號的access_token的在前文中已經實現。
基於微信小程序雲函數的方式獲取微信公眾號access_token -
2、遍歷調用公眾號永久素材列表介面獲取數據
調用素材列表介面,獲取相應的文章信息,這里主要獲取公眾號的圖文信息(type為news),介面調用請求說明:
http請求方式: POST
https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=ACCESS_TOKEN
調取素材列表之後在小程序中通過視圖組件scroll-view來實現,主要有標題、封面圖、摘要:
<scroll-view class="container"scroll-y='true' style="height:{{height}}px" bindscrolltolower='lower'>
<block wx:for="{{res}}" >
<view class='feed-item' id='{{item.title}}' bindtap='getDetial'>
<view>
<text >{{item.title}}</text>
</view>
<view style='text-align: center'>
<image src='{{item.image_url}}'>tupian </image>
</view>
<view>
<text >{{item.digest}}</text>
</view>
</view>
</block>
</scroll-view>
文章列表在弊並頁面首次載入時就獲取:
/**
* 生命周期函數--監聽頁面載入
*/
onLoad: function (options) {
wx.getSystemInfo({
success: (res) => {
this.setData({
height: res.windowHeight
})
}
})
this.getData()
}
函數getData()實現步驟,具體請求函數用雲函數來實現,先從調取acces_token:
// 雲函數入口文件
const cloud = require('wx-server-sdk')
const news = require('New')
cloud.init()
// 雲函數入口函數
exports.main = async (event, context) => {
let token = null;
await cloud.callFunction({
name:'token'
}).then(function(data){
token = data.result;
});
let offset = event.offset;
let count = event.count;
let nw = new news(token);
let rst = nw.getWechatPosts(offset,count);
return rst;
}
然後調取文章列表信息,每次獲取10條信息:
//獲取文章列表
getData(){
var that = this;
let pgno = this.data.pageNo+1;
let result = this.data.res;
wx.cloud.callFunction({
name:'news',
data:{
offset:this.data.offset,
count:this.data.count
},
success:function(res){
var resArr = [];
let body = res.result.body;
let total_count = body.total_count;//總共圖文數量
let item_count = body.item_count;//本次調用數量
let item = body.item;
let page_total = parseInt((total_count + that.data.count - 1) / that.data.count);
let mud = total_count % that.data.count;
const db = wx.cloud.database();
for (let i = 0; i < item.length; i++) {
let news_item = item[i].content.news_item;
//單圖文消息及多圖文消息
for (let j = 0; j < news_item.length; j++) {
let title = news_item[j].title;//標題
let url = news_item[j].url;//詳細地址
let image_url = news_item[j].thumb_url;//封面圖片地址
let digest = news_item[j].digest;//摘要
let author = news_item[j].author;//作者
let content = news_item[j].content;
resArr.push(new nw(total_count, item_count, title, url, image_url, digest, author, content));
let res_id = null;
db.collection('content').where({
_id: url
}).get({
success: function (res) {
res_id = res.data[0]._id;
}
})
if (res_id === url){
}else{
db.collection('content').add({
data: {
_id: url,
content: content,
title: title
},
success: function (res) {
}
})
}
}
that.setData({
res: result.concat(resArr),
page_total: page_total,
pageNo: pgno,
mud: mud
});
}
}
})
}
scroll-view組件到底觸發事件實現函數:
lower() {
//總頁數18/10=1
var pageno = this.data.pageNo;
var page = this.data.page_total;
console.log("總頁數:" + page+",第"+pageno+"頁"+"zuohouy:"+this.data.mud)
if (pageno > page) {//page 4
wx.showToast({ //如果全部載入完成了也彈一個框
title: '我也是有底線的',
icon: 'success',
ration: 300
});
return false;
} else {
wx.showLoading({ //期間為了顯示效果可以添加一個過度的彈出框提示「載入中」
title: '載入中',
icon: 'loading',
});
let offset = this.data.offset;
let count = this.data.count;
offset = this.data.offset + this.data.count;
console.log("offset:" + offset+"count:"+count)
this.setData({
offset: offset,
count: count
});
setTimeout(() => {
this.getData();
wx.hideLoading();
}, 1500);
}
}