云函数
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 |
展示介绍到这吧,点赞过十,接着更新~~😁