uniapp云开发

unicloud 开发:

构成: 

1, 云函数

2,云数据库: json格式的表

3,云存储和cdn 

云函数  运行在云端的函数

1,这个函数是执行在严格环境下的函数(避免使用没有声明的变量)

2, 从数据库差数据需要使用await 来拿到结果 

3, 参数 ( event  ,context ),event 是客户端传入的参数 , context 包含了 系统调用信息和运行状态  

4, 客户端调用云函数   uniCloud.callFunctions(){}

5,  记得改完 上传并部署 

 

1, 客户端调用 
uniCloud.callFunction({
				name:'holy-test',  // 云函数名称
				success(res){
					console.log(res);
				},
				fail(e){
					console.log(e)
				}
			})

2, 实际云函数编写 
'use strict';
exports.main = async (event, context) => {
	//event为客户端上传的参数
	console.log('event : ', event)
	console.log('context : ', context)
	//返回数据给客户端
	return {
		"data":{"name":'liming',"age":20},
		"code":0,
		"message":'hi',
	}
};



****************************  使用云函数对数据库进行增删改查 

//  获得数据库 引用
const db = uniCloud.database();


// 获取 表的引用
let collection = db.collection('User')


1, 增
let res =await collection.add([
		{"name":"vue"},
		{"name":"js"}
	])
	
	console.log('res : ', JSON.stringify(res))
	

2, 删 

// 查到 id ‘5f4b74af45d03400012d7c31’ 删除 
	let res =await collection.doc('5f4b74af45d03400012d7c31').remove();
	
	console.log('res : ', JSON.stringify(res))

3, 更新

两种 update 和set  
update  只是在原来有的 才能更新, 否则失败
set 如果原来有的数据没有字段 就设置字段, 没有这条的就新增 

update 

// 查到 id ‘5f4b74af45d03400012d7c31’ update 
	let res =await collection.doc('5f4b747845d03400012d7b4c').update({
		name:'heiheihei'
	});
	
	console.log('res : ', JSON.stringify(res))

set   已有 name属性 没有type属性可以更新成功, 如果2个都已经存在了,不会更新成功 ,
// 查到 id ‘5f4b74af45d03400012d7c31’ set 
	let res =await collection.doc('5f4b747845d03400012d7b4c').set({
		name:'hahaha',
		type:'vue2'
	});
	
	console.log('res : ', JSON.stringify(res))
 
 没有这条的就新增 

// 没有 id 123456 set  会新增, 注意此时 id必须为数字
	let res =await collection.doc(123456).set({
		name:'test',
		type:'vue-test'
	});
	
	console.log('res : ', JSON.stringify(res))





4,查   


 (1) doc 查id 再get 

  	//get 
	let res =await collection.doc('5f4b747845d03400012d7b4c').get();
	
	console.log('res : ', JSON.stringify(res))

  (2) where  使用查询条件

   
  //where
	let res =await collection.where({'name':'xiaoming'}).get();
	
	console.log('res : ', JSON.stringify(res))


  (3) 聚合   更加精细化的搜索 




 

 

 

********* ***********************************

如何使用 

1, 创建项目时 选择 使用云服务, 需要注册账号 并且实名认证 登陆

2, 去mainfest 基础设置获取应用标识 

3, 确保 登录 和应用标识都存在的情况下 , 创建云服务空间 ,填写不重复的名称

4, 链接服务空间 

5, 在cloudfunctions 里创建云函数

6 , 右键 上传并运行 ,等于上传部署并且运行 ,可以发现event的打印结果

 7,右键 打开webcloud 控制台,可以看到:

  (1)云函数 观察用云函数

   (2)云数据库 进行数据的操作, 表和字段 ,字段必须是完整的json格式 双引号 

   (3)云存储  进行文件操作  

   (4)跨域配置, 只要是h5端调用接口需要, localhost ,127.0.0.1还有dev启动自动生产的ip 做了特殊配置,本地调试无需配置

 

 

*******************************************

  上传文件  

  上传图片

<button @click="upload">upload</button>

<image :src='imgs'></image>

data() {
            return {
                imgs:null
            }
        },

    upload(){
                uni.chooseImage({
                    count:1 , 
                    success:(res)=>{
                    //  this.uploadToCloud ( res.tempFiles[0]);
                    console.log(res)
                    uniCloud.uploadFile({
                        filePath : res.tempFilePaths[0],
                        cloudPath: res.tempFiles[0].name,
                        success:(imgRes)=>{
                            console.log(imgRes)
                            if(imgRes.success){
                                this.imgs = imgRes.fileID
                                this.uploadToCloud(imgRes.fileID)
                            }
                        }
                    })
                    },
                    fail() {
                        
                    }
                })
                
            },
            uploadToCloud(fileId){
                uniCloud.callFunction({
                    name:'holy-test', 
                    data:{ imgUrl: fileId},
                    success(res){
                        console.log(res);
                    },
                    fail(e){
                        console.log(e)
                    }
                })
            },

 

云端函数 

'use strict';

//  获得数据库 引用
const db = uniCloud.database();

exports.main = async (event, context) => {
     // 获取 表的引用
     let collection = db.collection('user')
    
    //set
    let res =await collection.doc('5f4b689145d03400012d4d98').set({
        imgUrl: event.imgUrl
    });
    
    console.log('res : ', JSON.stringify(res))
    
    
    console.log(res)
    
    //返回数据给客户端
    return {
        "data":res,
        "code":0,
        "message":'success',
    }
};
 

  删除图片

<button @click="delImg">删除图片</button>

    delImg(){
                uniCloud.deleteFile({
                    fileList:[this.imgs] ,// 数组
                    success:(res)=>{
                        this.imgs = res.requestId
                        console.log(res)
                    },
                    fail(e) {
                        console.log(e)
                    }
                })
            }

****************

数据库 初始化可以使用 db_init.json 点击右键选择数据库来进行对数据库初始化操作

*******************

使用配置参数来配置默认传入的参数 

// 本文件中的json内容将在云函数【运行】时作为参数传给云函数。
// 配置教程参考:https://uniapp.dcloud.net.cn/uniCloud/quickstart?id=runparam
{
	"user_id": "5f4d172f45d034000132d277",
	"name": "前端开发"
}

************************   

db.command 命令

db.command 我的理解是尽管我们自己写处理函数来得到更新结果, 但是 使用 db.command 命令运算可能会更加接近数据库想要的结果, 

const dbCmd = db.command;

let dbFun;
	if(article_likes_ids.includes(article_id)){ // 取消收藏
		 dbFun = dbCmd.pull(article_id)  // 这种操作符合数据库的数据结构
	}else{
		dbFun = dbCmd.addToSet(article_id)
	}

await db.collection('user').doc(user_id).update({
		article_likes_ids: dbFun   // 数据库操作
	})

******************************

聚合操作

聚合操作可以进行更加精细定制的接口返回

例如: 1.  添加一个临时字段

.addFields({  // 追加返回字段
		is_like:$.in(['$_id',article_likes_ids]) // 接收数组 参数
	})

           2,分页

.skip(pageSize* (page-1))
	.limit(pageSize)

           3, 过滤某个字段

.project({     // 类似于field功能
		content:false  
	})

           4, 匹配条件成立的

.match( 
		matchObj // 筛选字段条件成立的
	)

//  示例

const db = uniCloud.database();
const $ = db.command.aggregate;

// 聚合 
	const list = await db.collection('article')
	.aggregate()  // 聚合关键字
	.addFields({  // 追加返回字段
		is_like:$.in(['$_id',article_likes_ids]) // 接收数组 参数
	})
	.match( 
		matchObj // 筛选字段条件成立的
	)
	.project({     // 类似于field功能
		content:false  
	})
	.skip(pageSize* (page-1))
	.limit(pageSize)
	.end() // 表示聚合操作完毕, 发起实际聚合操作 

最后必须以.end()结尾来发起聚合操作。 

 

***************************

如果返回的字段嵌套太深, 可以采取先拆分再重组的方式来简化 

const list = await db.collection("article").aggregate()
	.match({
		_id:article_id
	})
	.unwind("$comments") // 拆分
	.project({
		_id:0,
		comments:1
	})
	.replaceRoot({   // 重组
		newRoot:'$comments' 
	})
	.end();

 

*****************************

自增1    inc操作符号

'use strict';
const db = uniCloud.database();
const dbCmd = db.command;
const $ = dbCmd.aggregate;



exports.main = async (event, context) => {
	//event为客户端上传的参数
	console.log('event : ', event)
	let {user_id, thumb_id}  = event;
	
	
	
	
	await db.collection('article').doc(thumb_id).update({
		thumbs_up_count: dbCmd.inc(1)   // 自增1 
	})
	
	//返回数据给客户端
	return {
		code:0,
		message:"success",
		data:[]
	}
};

 

****************************

 

 

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值