00:00
别念了啊,我们往下看。今天呢,这个部分的难度会比较大啊,里面逻辑比较多。我们说一下,今天我们主要其实要去做的呢,有这么几个功能啊。那第一个呢,是这。给大家演示一下。嗯,这是。卡死了。来啊,重新呢,去登录一下大神1123点击登录。就这啊,比如这个是那个聊天的功能是吧,啊就聊天组件。
01:12
嗯,这个主要对应的是我们会有一个char的GX,呃,还有一个呢,是这个消息。也就是对应我们那个,嗯,我们有一个人叫max,是个这个吧,就这一个。回退一下。就这。显示这个消息列表。好,还有一个功能。就是那个未读消息数量显示。这个未读效应数量显示了有有两种地方,一个是。
02:03
某个聊天的未读消息。这上面都有可能有吧。这个是是这个分组列表。也就是说大家想想看,我这个里面是不是有好几家聊天呢。是吧,这每一个都叫一个聊天记录,这也叫一个聊天记录,对不?这是我所有跟当前这一个人的聊天记录,然后一点它就没了吧。对吧,啊,再一个是总数量,未读消息的总数量。啊,一共是这么三个方面。然后呢?那我们先来去做,第一个就是聊天的一个功能。那这里面呢,聊天功能呢,首先我们来去把后台的东西给大家说一说,这一次呢,我们后台东西呢,就不一点一点的写。啊,我们来看一下啊。我们这边啊,这个聊天的消息呢,我们得用数据库存起来,这个能不懂,就是我每发条消息都会产生一条记录啊,或者产生一个文档,嗯,在这里面呢,我们现在要去哪个里面写了serve。
03:14
既然要搞数据库嘛。就涉及到我们的另外一个文件DB modules,本来这个dus里面是不是只是定义了一个集合叫users,也这个决定了我的集合。为什么是又这是下面我要再定一个集合,再定一个集合,我把这个代码拿过来,这个代码前面咱写过一样的代码啊,我就不是一个写。来看一下,首先我们去定义一个STEM。看一下这个STEM里面的文档结构。From是什么?啊,From to什么概念?
04:01
From to就是谁发给谁的对吧,也就是从哪到哪对吧,谁发的消息啊。Pro就代表那个发送消息的这个用户的ID。没问题吧,我Q了啊,谁接收这个消息对吧?啊,我发给谁,我发给哪一个人啊,目标用户的ID对不对。啊没问题,再一个这个叫什么呢?下抬力什么意思。什么意思?啊,聊天啊,聊天的ID,这个地方有一个事情,我们最后要有一个分组列表,显示我与某一个人聊天对不对,我哪知道哪个消息是我跟谁的聊天呢?这个地方啊,有一个恰ID的一个概念。这个ID怎么组成的?说一下是由from和to组成的一个串。
05:00
啊,由from和to组成一个串啊,这个有两种情况啊。这个值相同有两种情况,一种是从from啊,从比如说我有两个ID,一个叫一,一个加,有可能是一法二,也可能是什么阿尔法一的,这两种应该是同一个聊天。对不对。这个一定要能理解啊,从一发个二和从二发个一。是不是他们的form和to是反的呀?能不能是反的,所以说啊,这个地方我的这个差的ID,如果假设啊,有一条消息是一法二的,有一条消息是阿尔法一的,这两个消息的差ID。应该是一样的字。那么呢,到时候我就能分辨出来,哎,哪些消息是一组,哪些消息是另外一种。就看这个插牌D。啊,到时候我们看着操作啊,后面慢慢理解。
06:04
再一个什么。什么内容啊?能看到吧,啊,接着read,这是个类型,默认值是什么意思呢?这里面说我们的消息有读和未读的概念。对不对,我怎么标示它未读,我怎么标示它读呢?非常简单,一上来产生的时候是什么未读的。这个能不能。啊,那一旦我看过以后呢。我是不是要变成to啊,就这么事好,还有一个叫什么。Create time。就创建的时间这个非常重要,主要是有我有一个功能,我这个是有排序的。对吧。比如说我要跟他聊了,在聊天,本来看他看的顺序,看的顺序啊,我是。前面的聊天对吧,他们前面就越往上面是越靠后的聊天懂不懂。
07:03
越晚的聊天来看着我这一聊。就会产生一个结果。他就上去了,你不应该有这种感觉,你不你微信聊过吗?对吧。你你跟某一个人聊了以后,是不是他就蹦到最上面去了,人老师我不还有置顶什么的吗?那种功能咱就没做啊是做也是一样去类似的做法。这个能懂吗?所以啊,就需要有这样一个字段,对吧,来去存。这个时间。能不能?啊,这个时间到时候是用于排序显示的,好,那有了这一个STEM以后,下面我是不是进行了一个对应的model啊,对应model就决定了我会产生一个集合。
08:00
对吧,集合尾随差点死吗。对不好,接着把这个菜摸的给他什么?暴露出去,那也就是说我向外报了两个吧,一个是user model,一个什么下model。没什么问题吧?好,这是关于摩这一部分。那下面呢,我们来去看一下路由。我这个路由里面啊,来看一下,我这个路由里面会多出来啊两个接口。啊,我先把这个代码呢,稍微的复制一下整过来啊。好,这一次啊,我们会稍微的去改一下路由的东西。包括这个引路都要改一改。前面呢,我是大家看啊,是这么引入的。对吧,那其实诶如果用这个写法应该还可以干嘛。
09:03
再加一个加model,诶这种结构的写法是不是比这个要简单一些,你看这个写三行对不对,而这个什么一行。能看到吧,啊,结构复制还是很好用的。好,那有了它以后下面啊,我们继续在线下复制啊,主要是大家读不懂啊,这个代码呢,就不给大家再继续往下写。因为前面呢,我们已经写了好一些了。主要要看一个是就看一下这一个接口,先看懂,接着去看一下我们的接口文档,看它是不是一个对应的关系。能理解吧,啊,我这里面是有的来后面的不有这么两个吗。获取当前用户的聊天消息列表。以及修改指定消息。为什么已读。
10:01
哎,一个是六,一个是七。那我们先来看六啊,它的地址呢,是斜杠什么message list,请求方式呢?是get,需要带参数吗?不需要返回来数据了,是这样一个格式啊,看一下这格式A啥。Code为零,这个没什么。date看date结构,Date是一个什么对象,对象里面有users,有check messages,这个好理解。这个我们现在不是根据当前登录的用户去找他相关的所有的消息的列表吗。这个是好理解,这个数组是所有相关的消息,也就相关的消息有几个,现在是不是就一个好,这个主要理解它,看看怎么理解啊。在这个里面啊,大家看到在这个里面啊,有者死,首先得说什么类型。
11:02
对象不是宿组,有意思是吧,一上来就挺有意思啊,是对象不是数组,我们看这名字可能第一心里的第一反应肯定是一个宿。对吧,其他所有都是这样,但这里不是这个对象,好,既然是对象,对象里面怎么存的结构,来看一下对象的属性名都是什么。一看人家说,老师,我俩认识的什么?大家觉得我要用一个对象来存很多优者,你说?对象的属性名用什么?不用对象的标识嘛,对不对。就是说我不成很多个优吗?你说我现在要用一个对象乘K是谁?下划线还有一个一嘛,这个能不能懂啊,而值还不是这个user啊,还不是比较完整的这个啊,大家看一下什么意思,这个值呢,只包含了user的两个信息,对吧,一个是user类,一个什么呢?Hand头像。
12:12
这个用于干嘛的呢?这个其实挺重要的,主要是我们最后大家想想看,我们获得了消息的列表不够,我们还是要显示用户的一些,大家看到我进去以后是不是还要显示用户的信用户的头像啊。能懂不这东西包括这边也是,包括这边也是,你光有消息不够对吧,消息里面可不知道你对应的用户。对应的这个用户到底是什么头像?对不挺关键的,包括他的名字也很重要啊,那。也就是说啊,通过这个接口文档,我们说是说去获取消息列表。对吧,但是反馈给我们的除了消息数组。
13:02
还有一个什么包含所有有者相关信息的一个对象容器,哎,是个对象,记住是个对象对吧。他是先把所有的U走了取出来,为什么要用对象不用数组了,哎,有意思对吧。啊,对象的好处是不是就根据属性名瞬间就可以得到属性值,那也就是说我希望根据某一个优者的ID能够得到优者的信息。对吗?我的那个message里面消息里面有没有用户ID。有没有?我的消息里面有用户ID,一个叫from,一个叫什么?这都是用户ID吧,我想得到它所对应的。
14:01
那个头像或者是他的名字,他的用户名是不是ID查。那如果我不用对象,我用数组去存。怎么办?怎么办呢?那我的便利。对吧,那我的便利便利一个个比较嘛,比较下方ID跟我这个form two嘛。对吧,最终是不是才能找到那个user。这很关键,这也是啊,大家前面我跟大家强调的啊,设计数据结构。啊,非常重要的一个环节。这样能够很好的提高你的代码的运行效率。啊,这样的话我就不用去编历了,你只要告诉我,那我就能找到所对应的两个用户。这个能不能懂啊,这个要你去理解,为什么要用对象不用数组,这很关键。
15:06
好,这是我们读到的一个啊,读到的一个技术文档,那下面呢,我们就来去看一下啊,来看一下我们当前的后台。是一个什么样的情况,对吧,那我们后台的这个路由看一下路径对不。对吧?MY,这是什么处理get请求好来。他先从什么。Cookie中是不是取出U的ID,这个没问题吧,有问题没有啊好,那没有下一步啊下一步。下一步接着他去干嘛去了?啊,大家看到他的意思,他先去找谁去。是不是找user有查询的时候,是不是查询数组列表啊,有传条件吗?没有没有的话,那是找到什么所有的。
16:07
但是这个什么类型。数组,数组里面每一个元素什么东西?是不是又找对象啊?这个能不能懂?但是我们最终需要返回的是这个东西吗?需要它吗?不需要,我们需要的是一个对象容器。所以我先整一个。对线容器是吧,接着去便利啊,记住了去便我的这一个。有DOS。拿到每一个dog,这个dog呢,实在是个user是吧,这个user好接着你看呢,这个没看到,为什么要这么写,大家看呢啊,我们说过了,我们的容器里面的属性名都是什么。者的下划线ID对不对,而值是什么?是不是他的用户名,以及他的什么头像,诶,这一个数据结构是不是我们需要返回的数据结构之一啊。
17:15
这个能不能懂,能懂吧,能懂好,我要说一下,这个地方其实可以用reduce。也就是说这一套可以reduce些,怎么写啊,这个很关键啊,点reduce。这里是累加啊,你不在我对象里面放东西嘛,那不累加嘛,对不对,好我这个怎么做呢?啊,我这个首先来看它。啊,这里面是不是一个回调函数啊,对不啊,最后采用的什么,主要是初始值是多少,大家知道不。对啊,空对一下就是这个容器嘛,对不好,接着这一个啊,就是我的那个user是吧,那接着呢,是我呃那个user就来个吧,实就是个user来说,对不对,懂吧,好,那我返回一个什么呢。
18:22
有者始啊终,哎,大家看到这个地方还还嗯,有者始来啊,写个大话再说,再写个在最后来个return是吧,先前面做一件事,写什么user啊,其实就是把这个拿过来。能不能最后返回?能不看到?而这一个得到的结果是谁?啊,就是啪嚓一下这样啊,把这个拿过来吧。
19:02
样的意思。我那个。这个吗?这个多少行,第二行对你得说一个行号啊,这个这个是这一个应该是谁你说谁呀?哦取的这里面多是吧,你刚改名了嘛,啊刚才改名字了是吧。能不能看到啊,其实这也这是也是个累加啊,大家不要单纯的把累加看成就是加数字啊。这个理解啊,这个这个嗯,也是老师,我可能不这么写,但别人可能这么写,对吧,你得看懂,这个很关键的,其实。
20:08
啊,你说这个呢,比上面这个简单哪去了,也不至于啊,但是有的人就觉得用这种好像啊,那种感觉就是啊,高大一点,高大上一点是吧,就是感觉我的技术还好一点。啊。好,这是这一个。来啊,下面下面有意思啊,下面我要去查查什么呢?查询user者ID相关的所有聊天信息,请问哪些聊天信息是跟我当前登录的这个优者ID相关的。你告诉我。哪些信息是我需要的,是我当前这个指定的这个优质ID所需要的。我这个啊,是查到跟我相,我我不就是这个U吗。我相关的什么意思,有两种情况,我发的发给我的不就相关的吗?
21:07
既不是我发的,也不是发给我的,跟我有毛关系吗?没有啊,我查询过来也没用啊。是不是这意思,显示在我这个应用,我当前登录的这个账号上面的,应该是所有跟我相关的呀。能不能好,这里面就有一个查询条件,非常有意思是叫啊,那也就是说from等于user ID,或者什么to等于UZID,哎,这里边有一个查询条件,特别意思是或者。是吧,诶这个时候啊,这个来说一下我们的翻译的方法,其实有这么三个参数,其实我们前面用过啊,第一个是查询条件对象是吧,第二个呢是过滤条件,第三个是什么回调函数是以前也是这么用的啊,只是这一次的查询条件对象比较特别。
22:00
对不?实际上我的查询条件是不是有两个,一个是from等于UID,一个什么to等于UID,但中间是什么或的关系?这个怎么指定呢,这个比较特别啊,这一个啊,大家看到我这个查询条件对象这个属性名就比较奇怪,哆拉福什么意思。诶,这要用到一个或的。求集对吧,那或谁跟谁获了啊,后面有一个数组啊,数组里面呢,就有这么两个。他看懂就行,你这个你要去背,那肯定是很难备注了。能看懂它的表意吗?也就是说它说诶,From是这个值是吧,To是这个值。但是呢,啊,这两个条件怎么样组合起来呢。是不是用或者呀。说白了就是查询条件是from的user ID,或者什么to的user ID。
23:05
能不能看懂啊,接着啊,这是干嘛去了,过掉什么东西啊,Pass过的,尤其是pass的我们前面一直在用这个东西。还有一个下半V是吧?啊,这个都是其次的,好,下面一个啊,回调函数不是用来取数据的,这个得到什么。聊天消息的宿主。这不查询嘛,Find的对不对,那也就是说我这个大家看看诶,这个时候是关键返回了。我们说过了啊,这个接口文档里面已经告诉我了,它返回的数据是不是这样一个结构。后的为零,这个没问题对吧?接着date的值是一个对象,Date的值是一个对象,而对象里面有两个属性,一个叫users,一个叫什么messages。
24:06
而这两个属性的值,这个什么类型,对一下这个什么类型数组,OK,很好。这个能不能懂啊,要能懂啊行,那能懂以后呢,下面还有一个。啊,还有一个这里面呢,下一个是我们有一个叫read my,干嘛呢,去读某一个消息,读消息最终是为了去改变那个。我们消息里面有一个read。标识是否已读?而我们,诶这个是。为什么是po的?主要我要修改数据懂不懂,我要修改数据库里面的数据,刚才用get是因为我就读过,这没什么对吧?啊主要这个时候我要改数据,这个时候最好用POS,而且我传了一些数据过来了。
25:03
看传的什么啊,大家看一下。传了一个from谁发的对吧?啊to是谁。请求。哎,这个to大家看到我不是自己琢磨,那过来是什么意思,是不是cookie里面的。这个地方就要想一个事情,我去修改那个read,我需要改我发的吗。要改吗?不能改。只能改什么别人,别人发我的。对不对,我发给别人的,得谁去改,他去改。我要把我自己改了,这样的话,他们看到以后就就看那个错误的结果了吗?本来他就没看对不,我在看了我的设备已经读了,那他就看不到了呀。懂不懂我只能去改啊,别人发给我的。对不对,对方发过了,对方谁了。
26:02
就是这个啊。这个from就是那个对方的ID。而这个to to肯定是我啦,对吧,既然是我的话,那肯定我可以从cookie中是不是取到。UID库中保存的是不是当前用户的UID?没问题吧?没问题,好了,接着干嘛去了?更新呐,对不对,那更新的条件是什么。对吧,刚刚说过了,是不是有from和to已经确定了,还有一个。什么意思?你瑞要force吗?他会错你去,那你改个啥进呢?你不就是要改回处吗?是不是这样概念?能懂不能懂啊,那能懂以后啊,后面啊,后面我们这里面还有一个小东西说一下啊,这个大家可能不知道,再一个呢,它默认更新啊,如果我这个条件是不是他现在先查。
27:07
假设他查出来两条,假设他查出来两条,它默认只更新一条。能不懂,或者说他要查出来三条,它也是默认只更新一条,但是我希望他什么。是不是将所有匹配的都更新掉?那怎么做呢?就是Mar就多条的啊,一次性更新多条,这个不用背啊,这这是后台的一些东西。最后有一个方形,好方形里面这里有意思啊,这里有意思啊,这个返回的是什么呢?大家看一下。返回的扣为几零没问题,这个date返回是什么呢?这有意思,就是大家想我更新的数据,我到底更新了多少条,你是不是得告诉前台啊,你不告诉前台,到时候他怎么更新那个变化的数量呢。
28:00
能懂我意思不,这个地方这一个属性啊,也是比较特别的,你打印输出就能知道把这个多可以打印,它是对象,对象里面有这样一个属性modify什么意思。修改,也就说我更新修改了几条啊,对吧。这能不懂啊,好。这是这。那这两个呢,写好以后啊,最好可以去干嘛呢,测试一下是吧,可以去测试一下啊这个啊如何来测试了。嗯,我们打开,我们可以打开我们的什么。Postman。来进行测试。这个还不太好测试,主要是现在我的那个。呃,我看一下我的我的那个消息啊,我看有有没有消息。
29:07
那这是,呃,我们当前这个应用是吧,当前这个应用呢,接着是去我看一下找一个看下C啊。我来一个好,这个地址是多少呢?这不这一个吗。知道吧,好,关键是现在有问题啊,发现有问题我我得先先支付进行登录才行。对吧,我得我得去登录啊,不登录那怎么行呢,那登录的话,我关键是我现在现在有个问题,有个特别,我没发消息,所以我的消息那个数据库里面是吧,那个集合里面没有数据,对吧?啊没有数据,那这一次呢,我就暂时先不测了,我们到时候有了数据,我们再去再去搞一下啊,肯定是应该是没有问题的,因为这个呢,我自己测试整过。
30:02
好,那也就是说到此为止呢,我们其实后台的两个接口啊,后台的两个接口就这么做好了啊,其实我没有真正的去自己亲自去写,其实这一个比前面的稍微要难度大一点,因为他用的那个语法吧,是我们更不太熟练的一些,呃语法,但其实呢,你要说特别难也不至于就是有一些新的语法出来了。啊,譬如说或者的条件,比如说啊更新多行怎么去指定啊,其他的都跟以前差不多啊行。
我来说两句