小程序代码中无法直接修改他人创建的数据记录
例如:数据库表中的_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);
}
}