uniCloud中云函数、云对象、Schema表、openDB、JQL概述

云函数

cloudfunctions/myCloud/index.js

exports.main = async (event, context) => {
  const { name, age } = event
    return `我是${name},今年${age}`
};

pages/index/index.vue

//callFunction方法 在前端和云端都可以调用另一个云函数
uniCloud.callFunction({
   name: "myCloud",//定义的云函数名称 上面的是myCloud
   data:{
   name:"小白",
   age:22
 }
}).then(res => {
  console.log(res)
})

云函数公用模块

cloudfunctions/common/wx-common/index.js

const appSecrest = '234234hj0js09dfv0j9ds09fjvfs9dfj'
const jwt = require("jsonwebtoken")
const verifyToken = (token) =>{
  // jsonwebtoken不是提供了jwt.verify()方法验证token
  return jwt.verify(token,appSecrest)
}
module.exports = {
  verifyToken:verifyToken
}

cloudfunctions/myCloud/index.js

'use strict';
const {
  verifyToken
} = require('wx-common')//引入云函数公用模块
exports.main = async (event, context) => {
  //event为客户端上传的参数
  const payload = event.token ? verifyToken(event.token) : null
}
//返回数据给客户端
return event
};

云对象

是云函数的扩展版

cloudfunctions/demoObj/index.obj.js

const db = uniCloud.database()
module.exports = {
  _before: function() { // 通用预处理器
  },
  async get(num) {
    return await db.collection("user").limit(num).get()
  },
  add: async () => {
    await db.collection('user').add({
      name:'张麻子',
      content:'我张麻子没有麻子'
    })
  }
}

pages/index/index.vue

const demoObj = uniCloud.importObject('demoObj') //导入云对象
let data = demoObj.get(3)
demoObj.add()

DB Schema表结构

DB Schema是基于 JSON 格式定义的数据结构的规范

{
  "bsonType": "object",
  "required": [
    "article_id",
    "user_id"
  ],
  "permission": {
    "read": true,
    "create": "auth.uid != null",
    "update": "doc.user_id == auth.uid",
    "delete": "doc.user_id == auth.uid"
  },
  "properties": {
    "_id": {
      "description": "存储文档 ID(文章 ID),系统自动生成"
    },
    "article_id": {
      "bsonType": "string",
      "description": "文章ID,opendb-news-posts 表中的`_id`字段",
      "foreignKey": "pyq_article._id"
    },
    "user_id": {
      "bsonType": "string",
      "description": "评论者ID,参考`uni-id-users` 表",
      "forceDefaultValue": {
        "$env": "uid"
      },
      "foreignKey": "uni-id-users._id"
    },
    "ip": {
      "bsonType": "string",
      "description": "评论发表时 IP 地址",
      "forceDefaultValue": {
        "$env": "clientIP"
      }
    },
    "publish_date": {
      "bsonType": "timestamp",
      "title": "点赞时间",
      "description": "点赞时间",
      "defaultValue": {
        "$env": "now"
      }
    }
  },
  "version": "0.0.1"
}

openDB

openDB是官方设计的一些表,可以直接提供给我们使用或者参考

JQL数据库操作

JQL,全称 javascript query language,是一种js方式操作数据库的规范

详细可看: http://t.csdn.cn/4BzLH
jql的诞生背景

传统的数据库查询,有sql和nosql两种查询语法。sql就不用多说了,而nosql是js方法+json方式的参数,写法形如:

const db = uniCloud.database()
let res = await db.collection('table').where({
  field1: 'value1'
}).get()

nosql的写法,有时也会过于复杂,如下:

const db = uniCloud.database()
const dbCmd = db.command
let res = await db.collection('table1').where({
  //需要表达或关系,需要用or方法
  field1:dbCmd.gt(0).or(dbCmd.lt(-5))
}).get()

最难的还是用nosql进行多表查询,如下:看的头皮发麻~~

const db = uniCloud.database()
const dbCmd = db.command
const $ = dbCmd.aggregate
let res = await db.collection('orders').aggregate()
.lookup({
  from: 'books',
  let: {
    order_book: '$book',
    order_quantity: '$quantity'
  },
  pipeline: $.pipeline()
    .match(dbCmd.expr($.and([
      $.eq(['$title', '$$order_book']),
      $.gte(['$stock', '$$order_quantity'])
    ])))
    .project({
      _id: 0,
      title: 1,
      author: 1,
      stock: 1
    })
    .done(),
  as: 'bookList',
})
.end()

而jql将解决这些问题,让js工程师没有难操作的数据库

下面展示JQL多表查询例子:

// 客户端联表查询
const db = uniCloud.database()
const order = db.collection('order').field('book_id,quantity').getTemp() // 临时表field方法内需要包含关联字段,否则无法建立关联关系
const book = db.collection('book').field('_id,title,author').getTemp() // 临时表field方法内需要包含关联字段,否则无法建立关联关系
db.collection(order, book) // 注意collection方法内需要传入所有用到的表名,用逗号分隔,主表需要放在第一位
  .where('book_id.title == "三国演义"') // 查询order表内书名为“三国演义”的订单
  .get()
  .then(res => {
    console.log(res);
  }).catch(err => {
    console.error(err)
  })

jQ语句还提供了些云端环境变量,如下:

更多的细节可以参考官方文档: JQL数据库操作 | uni-app官网 (dcloud.net.cn)

参数名

说明

$cloudEnv_uid

用户uid,依赖uni-id

$cloudEnv_now

服务器时间戳

$cloudEnv_clientIP

当前客户端IP



展示介绍到这吧,点赞过十,接着更新~~😁

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

来自湖南的阿晨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值