00:00
好,那下面呢,我们就要去使用慢故操作数据库啊,一上来我就跟大家说要下载依赖,这个依赖最重要的一个是什么呢?就是漫故事。好,这个里面还用到一个加密的库,为什么用到它呢?很简单,因为我们后面要对保存用户信息,在用户信息里面有一个很重要的信息,就是密码,对吧?密码传给后台是个铭文传过去的,对不对?但是保存的时候能用铭文吗?不能,所以我们需要一个库来专门将我们铭文的密码。把它转换成什么密文后保存。这个能懂不啊,要能懂啊,每个库用来干嘛的?好,那我把这个下载的命令给它复制过来。就在这里是吧。有的时候他会不行啊,来再复制一下邮件复制。
01:06
嗯,好啊,等他去下载啊,来继续往下看,下面呢,我们要去啊,写一个专门的测试文件来去测一下我们如何使用mango DB来操作,嗯,使用man故事来操作mango DB这个数据库。啊,大家知道操作有哪些操作吗。就我要操作数据。有四个操作。增删改查用英文怎么说c rud,对啊,C rud啊,就是有时候后台工程师开玩笑,就是我的我的我的工作就干四件事情,CD。其实也是啊,你你你看你要不太界面的话,基本上就是对数据正常改嘛,但是别觉得太简单了,不就是正常改查吗?你不要觉得这个事就一定多简单啊啊来下面呢,我们就要去记住啊,你定要知道我们现在去在哪个应用里面去写代码,对不对啊,是在我们的server应用里面写代码,对吧,能懂吧,啊能懂好来我们来去写一写写一写,呃,我这一次呢啊会专门去创建一个文件夹叫什么呢?DB。
02:34
就数据库操作的代码,我放在这个里面,听懂了吧,好接着呢,我们接着来啊,我创建一个JS文件,我叫DB_test。能看到吗?就数据库操作测试吗?我现在是写的测试啊。嗯,给他记住测试什么呢?使用什么。
03:02
啊,Mongoose操作mango DB数据库对吧?好,那这个里面呢有一些步骤,这个步骤呢还挺多,因为这个后台的这部分呢,我对大家要求稍微低一点啊,大家就先根据我的这一个啊注释的说明,一步一步做出来就OK了。能懂吧啊做做的事多了,自然就熟练了啊,大家可能现在不太熟练,没关系啊。来,那我们就一步一步来做啊,一步来做,先做到第一步叫什么呢?啊,我们要想办法,是不是跟数据库连接起来才能去操作它呀。对吧,好,这个连接数据库这一部分呢,一共有这么四个操作,大家看到我写的这个这个过程啊,大家到时候写尽量按这么写。好,第一步干嘛照着做啊,你能照着做写出来就不错了啊,要引入漫故事吧,来引入一下叫什么require呗,这个时候是不是应该用S语法了,因为我里面写吧。
04:15
能懂吧,啊,这个能懂啊。啊,他正在加载有点慢啊,来我们来写一写啊,引入漫故事看一下,按说来说应该要有提示才对啊,它这现在正在加载的过程中,那我就直接自己写一下吧,啊,自己自己写就是这个这个名字。能懂吧,啊,那我得到的就是一个什么呢。那么呢,诶。啊,好了是吧,啊就是这个他没出始化。来第一步搞定了,第二步干嘛去连接数据库对吧,那连接数据库得用它这个man故事对象,它返回的这个对象,这个对象里面得有一个什么方法叫什么。
05:12
啊叫connectct,哎,这里面他只只是提出来一个一个disconnect,但是有个connect connect指定什么还记得不是不是指定一个URL,这个ul这个部分啊,大家看一下啊,大家不太清楚,就就可以来看一下,因为你有可能是不知道怎么写了,对吧,看一下这个地址,来我把它复制过来说一下啊。好,这个里面前面部分是什么固定的对不对,这是一个URL,只是它遵循的协议是这样一个协议,懂不懂是协议的名称啊答案平台访问的HTTP嘛,那也是个协议,对不对啊,这是他是那个服务鉴定的什么端口号,最后一个很关键是可以这什么。
06:06
啊,这就是那个数据库的什么名字。没问题吧,没问题,那后面的两个操作,我是为了去想办法去监视数据库连接到底有没有成功,那我要想监视我得干嘛呢?我得先去获取连接对象,记住了,获取连接对象怎么获取了,大家看一下这边看看大家能不能看懂man故事有一个属性叫什么connection,诶这个属性的值就是那个连接对象。听到吗?那也就是说我可以用一个变量啊,我就把这个变量名字写短一点,写什么是不是得到连接对象了,下一步。监听,那我怎么监听呢?啊,这个地方它有一个方法叫啊啊监听一个啊监听监听是不是要监听一个世界名呢?啊哪个世界名呢,看一下看看大家懂不懂connected。
07:14
啊,ED代表过去实际已经完成了,对不对啊,这个名字还是比较能借明之意的吧,比较能借明意的啊好,那在这里面我就写一个诶回调函数,那也就是说这个回调函数什么时候调用呢?对吧?连接成功是不是自动六啊,连接成功什么自动啊,就回调吧,回调不就自动调用吗?那你说我干嘛去写一个输出啊,说什么啊数据库连接。成功是吧,啊,再来一页啊好。
08:03
来,大概我们前面的部分先做到这一步,我们先测试一下。这个了没有,但是大家要注意啊,你去连接mango DB数据库必须要保证一件事,什么事呢?服务必须是开启的,大家现在应该都是开机启动吧啊,如果大家现在是开机自启动,这个就不用担心啊,但有可能你开机启动一不小心把它干掉了,或者因为某些特别的原因它被干掉了,对吧,那你要是不是再去启动一下啊,这个事情我就不带家操作了啊,大家应该会的,好,我们来去。测试一下啊,测试一下这个怎么测试呢,很简单,来右键。运行好这个时候就有一个问题,有的时候啊,我们装这个问题是按正常情况下应该是可以的,嗯,这个东西一旦有时候就装上它,以后装上这个啊,我后面会装一个工具啊,你们还没装,估计是用来去查看mango DB数据库的一个工具。
09:05
啊,它影响了这个这个右键的这个功能,如果假设啊不行了,我该怎么办。现在我就假设他不能用。我该怎么去运行这一个文件呢?这个要会。啊,你不能说没有了工具,你有些基本的事情你就干不下了,那不行。那你得知道我右键是在干什么。对吧,实际上是通过load来去运行这个GS文件,对吧,那我应该要你要通过命令的方式,要能去做这个很关键了,能懂吧,因为有可能那根本没有这个工具,对吧?后台工程师可能没这工具,或者你当时的工具就没法用,或者在别人的电脑里面都有可能在这边,所以会命令是最重要的。
10:04
能不能啊,来用一下,先是执行no。接着我怎么运行这个文件呢。B,不是吧,那是什么?我是要找到这个文件吗?这个文件在这个目录下面啊,对,不写DB下面的什么DB_test点解轴里。这里面是不是报错呀,报错是不是他啊没有找到什么mongoose,那也就是说。我估计我是不是下载到那个前台应用上面去了。对吧,能不懂啊,那也是说我我的后我是后台应用需要,这也是大家需要注意的地方,因为我们现在其中两个项目对吧?啊,大家要注意啊,也就是说我需要在这一个里面啊,这个没关系啊,主要是要发现知道问题是怎么回事,最终把它解决掉啊。
11:07
需要在这个里面去做一下是不是下载啊,那同时我需要去把这一个里面的,最好把它删掉啊,虽然说留着呢,也不会有多大的影响,因为我没用嘛,对吧,但是最好别这样啊,给它删掉来删掉,只是把这个音落改为什么remove就行。能看到吧。嗯,把这个mango和MD5这个给他干掉。好,这边下载完了吧,那下载完了以后呢,下面我们啊,当然执行命令的时候不要每次都写啊,你稍微翻一翻。这怎么方法知道啊走。哎,说什么,哎,数据库连接通也是吧,挺好啊,你告诉大家写的时候啊,尽量啊写一部分就测一下,如果能测的话,尽量测一下能不能理解啊,能理解啊行,那能理解以后呢,下面啊,我们需要去做下一个呗,就做照着做啊。
12:19
照根据这个说明来去写下面的稍微难度大一些。啊,先做我们的第二步,最终我们要得到对应特定集合的什么呢?Model。还记得吧啊,回答忘了忘了,咱就就一点一点写啊,来说一下。证券出现概念叫集合,在man,在mango DB里面有两个概念,一个叫文档,一个叫集合。这个要懂啊,这个必须得懂啊,非常重要的两个概念。啊,如果你学了半天,最后这个没有没有太清楚,那肯定是你就记住再多API也没用。
13:03
啊,那什么是文档,什么是集合了,大家知道我们啊在数据库里面是不是可能比如说我现在要保存用户数据。可以吧,假设用户有user pass,我就搞两个啊,不搞别的。那大家想,那我存的时候是不是将一个对象啊,User name假设用name吧,啊,用P来代表pass word把它存进去,它的值是假设是A,他的值日假设是123,对吧。有可能吧,那我可能是不是存多个人多用户。有没有可能有,譬如说他的name呢,是B啊,他的password了啊,是345啊随便来一个。好,来说一下。啊,那什么是文档,什么是集合了。啊,先说文档是什么类型对象啊,这个知道类型很关键,这类型就很好知道它是什么,而集合什么类型数组对很好啊,啊,那其实是什么意思啊,首先说文档啊,就是我们存进去的一个数据对象。
14:16
也就是说这个user。能懂吗?只是它比这一个user呢,至少会多一个信息下滑下ID。能懂不啊,这个文档就是一个对象,我们说一个优者文档啊,就是一个优者对象啊,我们放我们在存之前,是不是没有下划线ID的一个对象啊,等到我存进去以后,存在数据库里面的那个文档是什么,有下划线ID了。能不能,那接着我是不是可能会存多个。那存多个用户,那也就存生成了多个文档呗,那多个文档组合在一起称之为什么集合?
15:01
能不能懂,那我的文档如果叫user,那这个集合就应该叫什么user,这个很关键啊,名字也挺重要的啊,因为这个名字后面有用啊,集合的那个名称总是后面有个S。能到吗?啊,有的是啊。这样一个概念,这个要搞清楚好,再一个说了,其实啊,再说一下我们我们生活中如果要登记很多人的信息,我会用一个什么呀,用什么登比较方便,比如说我要在电脑里面登记很多人信息,会用一个Excel表格,对吧?那个Excel表格是一个什么样的形式,那个头部是写的是你的名称,你的年龄,你的电话。这个能想象不啊,哎,就是在在这里这个位置是是有多项的。对吧,能懂不能懂啊,是多项,而这一个下面写什么,下面这一这是不是多行啊,每一行是不是就是一个人的信息。
16:11
能懂不能懂,嗯,每一行就是一个,这里面也可能是从这里开始啊,从这里开始都有可能啊,这里面就会写他的,呃,那个某个人啊,他的年龄是多少,他的呃,那个身高是多少,他的体重是多少等等一些相关的信息是不是都填上。能懂吧,能懂。这个呢,我们叫它一条记录,叫一条记录,这个能懂吗?啊,一条记录也就是你一个人的信息嘛,或者一条数据,或者一条记录,这个实际上就是一个document。第一个文档嘛。嗯。能听懂吗?啊,那还有一个呢,这整个这整个我们就叫它一张表。
17:06
能懂吗?这整个就是一张表,而一张表里面是不是包含了N条记录?能不能理解啊,N条记录,而这个表就相当于我们前面说的什么集合,对不对?好,那你这里面是不是有姓名,有年龄,有身高这样一些东西啊,这个叫什么,这个叫字段。啊,这个叫字段,其实就对应对象里面的什么属性名。对吧,对应对象里面属性名,也就是说你这个文档里面有哪些属性,对吧,一个文档是个对象嘛,那对象里面是包含的是各种各样的属性呢?啊,其实这个记录啊,字段啊,表啊,这个是什么里面的概念呢?是关系型数据库里面的一些概念。咱现在学的芒果DB,它是一个什么呢?非关系数据库。
18:02
啊,就完全用文档和集合来去表达,其实很多东西都类似啊,是通的对吧,就好像大家去学语言,大家学完GS,如果你学明白了,你去学学Java,学别的语言,其实都类似。啊,这个要理解啊,我主要是通过这个对比,让大家知道有两个概念,一个叫文档,一个叫集合,对吧,文档是一个对象。懂不懂?而集合是多个文档的什么数组?能不能搞清楚。啊。好,那搞清楚以后,下面我们要说。来啊,我现在要得到对应的特定集合的一个model,这个东西用来干嘛的?用来去操作集合数据的。用来操作机会数据的,因为最终不要操作机会数据吗?对吧,我们虽然说我们要去操作数据库,那你不能去对着数据库操作。你最终是操作数据库里面的数据吧。
19:02
能不能啊,这个要搞清楚好,下面有两步啊,这两步呢,大家可能啊,不是特别记得,不是特别深刻了,我们先来看一看,看以后再写一下啊。来。在这里面呢,是这么一个步骤,看看大家还有没有印象,Mangoose有一个啊,有一个在里面啊,有一个方法叫什么呢?STEM,诶这里面有个概念叫STEMSTEM翻译过来叫什么呢?本来叫约束。约束是一个什么概念呢?其实就是定义文档的结构。懂不懂,也就是说你的这个文档里面有哪些属性啊,属性值是什么类型,是不是必须的对吧,甚至有可能默认值是多少。这个能不能懂啊,也就是说现在啊,我现在要去操作的是一个用户啊,操作一个用户,那我有一个需要去定一个用户对应的什么呢?STEM啊,定一个用户对应的一个STEM,那这个时候我就取了一个名字叫什么user STEM。
20:16
能不能看到啊,有者好,它怎么产生呢?谁来帮我产生man故事啊,有一个方法啊,这是个大写啊,比较特别,它是一个大家看一下,这不用背啊,不用背,它是个大写的,注意一下就行好,这个里面传什么呢?传一个对象,对象里面指定你的文档的结构。理解是第一关键,语法你可以不太熟练,没关系,那这个文档的结构有有哪些部分需要指定呢?姓名。
21:01
还有什么属性值的,什么类型属性名肯定字符串对不对,这毋庸置疑啊,还有什么呢?还有是否是必须的。能不能,甚至还可以有什么呢?默认值是多少?也就是说你不指定,就基本上有一个默认值,默认值这个概念应该要懂啊,咱那个行仓是不是可以指定默认值来着。好,来啊,说一下这个里面啊,这个里面具体是谁啊,我就不写了,大家看懂这个里面的,我把它直接拿过来。啊,我这里面呢,就只是设计了三个啊,其实我们最终的用户,我们应用中的那个用户比这个字段更多。啊,我们先搞一点简单点,不搞太多了,看一下第一个U类什么类型使是否是必须的是。能看懂吧,能看懂啊,Password类似的吧,在type也是类似的,这三个字段是必须的,那当然我也可以去设计啊。
22:08
譬如说假设啊,我后面呢,有一个头像的一个概念,可以说我叫什么呢,看着可以吧,啊头像啊,我这个头像呢,保存的是啊什么类型呢,说一下是字符串啊,我没有说是必须的。那就说我这个头像可以不指定的吧。Come in。可以,你想想看,如果他是必须的,我们那个功能做不下去,为什么呢?因为还记得我们注册登录吗?注册的时候只需要指定用户名,密码和类型,有指定头像吗。没有,如果头像是必须的,那那个功能就做不出来了。能不能因为头像是我后面是不是修改用户信息,完善用户信息了做的。所以我的这个hand这个字段就是可可以后面再传对不对啊,这个要知道啊。
23:08
好,这是这个。来下面啊,定义好这一个user STEM以后,下一步我们最终要定义什么去了model啊,定义model好,定义model这个也比较特别,看一下啊。来定义model,哎,Man故事有一个方法叫什么小写的model,小小model里面传两个属性来啊,传两个参数啊,传两个参数,第二个参数很简单,把那个约束给他传过去吧。第一个很关键,第一个传什么呢?首先要确定我们最终生成这个集合的名称叫什么,你要确定下来,比如说我们确定下来,我们最后的集合名字叫user。能懂吧,那你这个名字就必须写成什么呢?有者,也就是说把集合名称的S去掉以后,指定那个名字。
24:11
能懂吧,最后他返回的,诶,你说是个什么东西。应该不是个对象。啊,如果是个对象,我不会这么写。那更不可能是个数组了,你要想想我就我这风格,数组肯定加S了,对,构造函数是个函数。啊,因为我这个U是大写的。U是大写的啊,现在我得到的是model,大家看到我有意的把这个M写成大写的,看到吧,啊,好,这是这个来。我们来写一写啊,啊大写的user model等于啊,Mangoose点,诶,它是个小写的啊,传什么呢?第一个传者接着是。
25:04
谁有the STEM?对吧,好,这个时候就确定了什么呢。就确定了集合的名称为啊,就确定好了。这个来问的。啊,集合的名字啊,为优者。好,那到这里呢,我们的第二步做完了,那后面我们就利用这个user model去进行增删改查的操作。目标就是user。这个能不能懂。啊,你可语法不太,不是特别熟练,没关系啊,你要知道我要干什么去,好看看我们的第三步。把这个呢,先注释一下,大家看着这个注释两种不同的注释方式啊,他们是有等级的。
26:05
好来啊,一个下面就是一个人来做啊,大家看到下面的四个操作不正常改查的四个操作吗?这是我们现在第一个是不是先添加呀,好通过摸多实力再注意啊,我说的是它的实力干嘛去。调用它的C方法干嘛添加数据。同学们懂好,下面呢,我要去分别去定义一些函数来去做,比如说我们来去定义一个函数。能看到吧,啊,我取名叫test c叫或者叫save test都行。你看到吧,就测试什么保存数据的对不对啊,最后后面我再去会去干嘛呢,调用一下来测试这个功能嘛。能不懂,但现在肯定不行,因为我现在还没写嘛。
27:02
对吧,那你说我先得干嘛。就是创建它的实例啊,这个能不能懂啊,创建哪个model的实例。对,有model的实力的实力,对吧?啊强调一下,这能懂不?那我得干嘛。六啊六,谁大写的有者model里面传什么呢?好,最终我是要将一个优者对象保存到数据库里面去。是这意思,因为我要将一个优的对象保存一个文档吗?啊,它跟文档是有区别的,它是没有ID的,对不对,因为那下划线ID是不是mango DB数据库自动生成的。好,这里面我要整出一个对称来,你可以提前准备,也可以在这里面直接整。能懂不能懂,好这里面啊。
28:00
必须至少应该有三个属性,而且不能随便瞎写属性名。是不这意思,比如说啊,这个是to可以吧,好,接着还是什么password啊,值假设123吧,来一个啊接着。Type呀,啊,Type的值只能是。这里面的某一个能不能啊,假设是大神。看到了吗?但是这里面有一个小问题。就是这个pass的要加密。能懂吧,也就是说我们不能直接查E23得干嘛呢?M第五加密,那也就是说我需要在当前这个里面引入什么啊,那个MD5对吧?啊引MD先写require。这括括号MD5有吧,有它返回来就是个函数,我可以给这个函数取一个比较合适的名字,取个什么名字比较合适呢?就MD52。
29:13
对吧,这是一个加密的函数,什么加密了M第五加密呗,能懂吗?好来。那下面也就是说我要这么做。是不是这个点。能懂吗?能懂,那也就是说现在就返回的,那我命一个什么名字比较合适。这要知道啊,我溜了一个他,我现在用一个用一个变人名来存。怎么写?有着。你本来是别人什么user model,你是优,这有点不太好吧?这么写。
30:07
大家一定要在命名上面下工夫,也就是说你自己平常写东西的时候就要对自己有要求。你平常要没有要求,你写项目的时候肯定没有要求的,因为你要突然之间对自己提出一个在命名上面比较高的要求,那你完全受不了。你这平常自己写的时候啊,就尽量把它写好,有讲究,其实这种讲究一旦一旦你习惯以后,不是什么负担,很正常。因为这是个公式函数嘛,大写的。那最直接的办法就是把这个首字母变成小写以后用它作为实例的名字。啊,这个时候不适合你用,用一个这个啊,大家再看就像个优的对象,我现在是一个用的对象吗?不是有人说老师我这么写。这也不是太合适啊,也不能说有问题,但是这样看不出来你是哪个用哪个model对不对,知道吧,啊,最好是讲究一点啊,因为咱都是讲究人对吧。
31:10
好,那下面干嘛去调用。什么方法?C是保存数据啊,保存数据是不是都已经指定了,我们只需要去use model点什么C。就可以进行保存。但是我们得要知道到底保存有没有成功啊,对不对,其实它会有一个什么呢?回调函数应该还有印象吧,回调函数能不能回调函数还记不记得这个里面有参数。什么第一个参数叫什么I,第二个呢。就是一个date,实际上这个date应该随我保存,大家想啊,我保存了一条一条一个对象。
32:06
它是不是生成了一个文档。实际上这个写的最好的应该是写他,嗯,他也不是最好的,我我不太喜欢写这个,这个返回的是一个文档给你。那个文档应该是谁呢?我告诉你就是user。或者写user do也行,能懂吗?实际上就是那个user包含user信息这个文档对象,我可以简写一个user可以吧,可以没问题,那我怎么说明呢,打印输出一下对不对,现在是不是搞的C。接着我看一下到底有没有error,有没有对不对,如果error有值,说明是不是出错了呀,如果error没有一个具体的值,是不是就是有问题啊,不能是有问题,应该是好的,对不对啊,不能是有问题啊,这就反了,来看一下优等,两个都同时看一下,也就是说不管有问题还是没问题,我是不是都能看出来。
33:01
啊,这个打印输出的时候啊,大家可以打一下打印多个字。你就不用写多个打印输出语句了,能不能看懂,好现在我们就要开始测试了,因为我这个调用已经是不是写好了,好,那就来一把,把这个搞完我们就可以休息了啊,因为时间挺长的啊,刚才都忘了。要休息一下,好来试一下。把这个先停下来,怎么停下来看加C翻一下对不对,走你。大家看一下是不是这的C啊,那说明什么没有出错呀。是吧,接着是他返回了这样一个对象啊。对象不就是一个user者吗?那不,有下方ID由我传过去的user者内容,他是为了以太。没问题吧,而这个pass存的是一个什么32位的字符串。
34:03
啊,因为M第五加密它是个固定的,无论你的铭文多长,你就是一个字符还是1万个字符。我最终都是变,为什么呢?32位的一个字符串。啊,这个是它的一个版本的一个零,这个不用管它。那也就是说我们这个保存是不是已经成功了,嗯,就这么简单,这难吗?啊,只是说大家难的地方,对完地方,其实就是语法不太熟练啊,这个没关系,忘了正常,忘了才是你这种正常的表现,你要不忘他不太正常。那不忘就说明你没有必要再来学了,因为你你这个记忆能力,那那早已经成功了,对吧,啊OK,不忘没事,现在走在成功的大路上是吧,马上就要成功了。
我来说两句