uniCloud问题记录

mongo_cell_decison_not_found

扩展库依赖 3 张 opendb 表:opendb-tempdata,opendb-device,uni-id-device。公测版 uniCloud,执行扩展库会自动创建。如果你使用的是 uniCloud 正式版需要自己在 uniCloud 的 web控制台 创建这3张表

uni-id用户体系,个人资料头像无法上传问题

很有可能是需要将服务空间切换到付费版的服务空间,如果没有效果建议关掉Hbuild 重新打开运行看看

<unicloud-db> </unicloud-db>报错

      <unicloud-db v-slot:default="{data, loading, error, options}"  collection="pyq_article" :getone="true">
        <view v-if="error">{{error.message}}</view>
        <view v-else-if="loading">正在加载...</view>
        <view v-else>
          <view class="title">{{ data.id }}</view>
        </view>
      </unicloud-db>
//Cannot read property 'id' of undefined

但问题是我{{data}}可以拿到数据,但{{data.id}}却说undefined,应该是当时还没获取到数据,但是loading不是会判断好了再加载吗?有点疑惑 于是乎 我就直接{{data?.id}}来解决了

有同学可能不知道?. 与??的作用,下面给大家演示下:

let obj = {name:"小白",age:25}
console.log(obj.name) // 能够正常打印 小白
console.log(obj.address) // 打印 undefined
console.log(obj.address.one) // 报错了,address都undefined 更别说下面的one了

那么如何解决呢?

console.log(obj?.address?.address) //表示尝试向下获取,有就获取,没有就undefined
console.log(obj?.address?.address ?? "不存在") //打印‘不存在’,??号后面类似设置一个默认值

TOKEN_INVALID_ANONYMOUS_USER: 未能获取当前用户信息:当前用户为匿名身份

使用云函数请求云数据库的数据时,不受权限限制!但使用前端代码请求时,会受到权限限制,没有拿到token可以从两个方面排除:

  • 首先可能是DB Schem数据结构的权限没有打开,如下图:

  • 此次可能是用到了jql语句内云端环境变量:

$cloudEnv_uid

用户uid,依赖uni-id

[uni-id-users.password.read]权限校验未通过

  • password 对于密码前端是无法查询的,除非你把password设置成string类型,或者避开这个查询的字段

  • uni-id-user,这张表read的权限是否打开

uniIDHasRole 如何在vue3中组合式API中使用

可以使用uniCloud.getCurrentUserInfo实现

console.log(uniCloud.getCurrentUserInfo())

将富文本内容以文本形式 渲染到页面上editor组件中

Obj.editorCtx.setContents({
 html: res.result.data[0].content
})

使用unicloud-db组件,多表联查时遇到的尴尬问题

我先用uid查找用户自己的数据,得到一个用户点赞所有文章的id,我们定为temp1,然后用这些文章id找到文章详情,我们定为temp2,temp2表中我用的逻辑删除,用state来代表删除状态,于是我在获取temp2中加入【where(`delState != true`)】条件;

然后得到的结果将已经是=》用户所有的点赞记录,跟点赞记录外键连接的文章表信息,然后循环时由于有的点赞下文章状态是删除状态,所有下面的文章信息为空数据,渲染出来就是一个空,如何去除这个空呢?我弄了一些时间,然后用了一个取巧的办法,请看下面:

v-for="(item, index) in data.filter(item => item.article_id.length != 0)" :key="index"

大家有其他方法,欢迎留言~~

Uncaught (in promise) Error: 未能获取当前用户信息:登录状态失效,token已过期

//解析客户端token获取用户信息。常用于在前端判断当前登录的用户状态和用户权限 
console.log(uniCloud.getCurrentUserInfo())
import { store } from "@/uni_modules/uni-id-pages/common/store.js"
console.log(store)
//从本地缓存中同步获取指定 key 对应的内容
console.log(uni.getStorageSync("uni-id-pages-userInfo"))

详情页与主页组件,点赞相互告知,实现无感联动

在同级组件中,我用的vuex,store.js配置:

import {
  createStore
} from "vuex";
const store = createStore({
  state: {
    cellback_detail_like: {
      _state: false,
      _id: ''
    }
  },
  mutations: {
    up_cellback_detail_like(state,data) {
      state._state = data.isLike
      state._id = data._id
    },
    reset_cellback_detail_like(state) {
      state._state = false
    }
  },
  getters: {
    watch_cellback_detail_like(state) {
      return state
    }
  }
});
export default store

详情点赞页配置:

import {useStore} from 'vuex'
const vuex_store = useStore()

// 文章点赞点击事件
const clickLike = () => {
  let res = on_like(uToast)
  if (res) {
   vuex_store.commit('reset_cellback_detail_like')
   vuex_store.commit('up_cellback_detail_like', data.collectiones)
  }
}

主页点赞数与状态联动:

import {useStore} from 'vuex'
const store = useStore()
// 通过vuex监听同级组件 中数组的变化
watch(() => store.getters.watch_cellback_detail_like, (val, old) => {
 dataList.value.forEach(item => {
 if (val._id._value == item._id) {
   val._state ? item.like_count++ : item.like_count--
   item.isLike = val._state
  }
 })
}, {
  deep: true
})

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

来自湖南的阿晨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值