粉丝3963获赞1.8万

hi, 大家好,我是文轩,欢迎再次收看文轩解码。 这集视频是 no jazz 教学系列的第二集,我在第一集里分享了怎么安装 no jazz 和编写第一个 no jazz 后端程序。如果你还没看第一集的话,等一下记得要回看,因为他能帮你快速入门。 今天我将会和你分享怎么用 not just 创建后端服务器。这个后端服务器会根据前端发送的请求返回特定的数据,这就像用户在前端输入用户名和密码,然后把登录信息提交到 not just 服务器验证,这时候 not just 服务器就会启动验证程序,开始验证用户名和密码。 如果用户名和密码都正确, no j s 后端程序就会返回登录成功的信息。当创建 no j s 服务器的时候,我们 我们需要给那 jas 服务器设置一个服务端口 pod number。 一般 linux 或者是 windows 服务器会运行好几个对外开放的服务,像邮件服务或者 ftp 服务,这些服务都有自己的服务端口。邮件服务器的服务端口是二十五, ftp 的端口则是二十一。 邮件和 ftp 服务会一直监听这些端口,去查看是否有请求进来。我们的那 js 服务器也一样,也需要一直监听自定义的服务端口是否有请求,然后处理这些请求。 端口号零至一零二三是系统保留的端口号,所以我们不能用。一般用 gs 服务器的端口我都会选用三千或者是五千。嗯,其实也没有特别的理由啊,可能就是看着顺眼,而且他也不是保留端口。当然你也可以选用其他的端口 口,只要大于一零二三就可以了。好的,现在我们进入实操的部分,编写第一个那 g s 服务器,先切换到 vs code 这个服务器我们将会使用最原始的方法去创建,那就是使用 not jazz 自带的 http module。 要使用 http module 就需要先将它导入,我们可以用 require 函数导入这个 http module, 然后在函数里输入 hashttp 字符串, hashttp 模块会返回 hashttp object, 所以我们需要将它赋予一个变量。 一般 http object 在程序运行的时候不会改变,所以这里我就使用 constant 去储存这个 http object。 h t t p 等于好的 h t t p 模块现在已经被导入了,先保存一下代码,将它命名 server dot j s。 接下来我们会使用 http object 里的 create server 函数创建服务器。输入 http dot create server 小括号 create server 函数会返回 server object, 所以我们需要将返回的 server object 赋予一个 constant const server, 等于 这样我们就可以把 server object 赋予这个 server 变量了。我们的服务器已经创建好了,接下来设置一下服务器在受到请求的时候该怎么响应。 我们需要把一个请求监听器植入到刚才创建的服务器里。那我们要怎么定义和植入这个请求监听器呢? 很简单,所谓的监听器其实就是一个函数,当这个函数收到请求后就会开始处理请求,等请求处理完之后,就会把处理好的信息返回到前端。要植入请求监听器,我们直接在这里添加一个函数, 这个函数有两个参数,第一个是 request object, 第二个是 respond object。 我现在用的是箭头函数,是比较新的定义函数语句。在之前的交往数教学里,一直都是用方省关键字去定义函数。这种新型的箭头函数语句会让我们的程序看起来更简洁。这个监听器在每次收到请求的 时候都会被执行。我们能从 request object 里获取从前端发过来的请求信息,这包括请求方法是 get 请求还是 posing 求,还有其他的像请求头部信息和请求内容等等。第二个参数是 response object response 这里的函数是专门用来处理即将要反馈给前端的信息。比如我们可以用 response 到 n 函数从后端发送信息到前端,又或者用 response 到 set header 函数设置头部信息。 现在我们在监听器里插入一行代码,然后 not dress。 服务器每一次收到请求的时候都会返回 hello from not dress 的字符串。我们可以使用 response 啊,这里的 n 函数 response dot n。 接着我们在小括号里输入 字符串 hello from not jsever。 好的,截止目前为止,我们导入了 hashttp 模块,然后用 hashttp 模块创建服务器。再后来,我们在这个服务器植入一个请求监听器,专门用来收集前端发过来的请求,然后最后通过 response 到 end 函数把字符上返回到前端。 创建完服务器,那接下来我们就要让服务器运行起来,并开始监听来自前段的请求。要开始监听来自前段的请求,我们可以使用 server object 里的 listen 函数 server listen 小括号。接着我们的小括号里 添加三个参数,第一个参数是端口,第二个参数是服务器的 ip 地址,也就是你的电脑的 ip 地址。最后一个参数是毁掉函数,这个毁掉函数会在服务器开始监听请求的时候被调用,一般这个函数会用来显示服务器已经开始运行的信息, 正好让我们知道服务器是不是真的已经开始运行了。我们先把 port 和 ip 地址都保存在 constantly const port 等于三千,然后 const ip 等于一二七点零点零点一,为什么我要输入这个 ip 地址而不是其他的地址呢? 这是因为 notice 服务器是在你电脑运行的,要访问这个服务器就必须访问你电脑的 ip 地址。一二七点零点零点一,其实是指向你的电脑这个 ip, 也叫做本机 ip, 访问这个 ip 地址就能访问你刚创建的 notice 服务器。 好的,现在我们在 list 函数里插入第一个参数 port, 然后第一个参数输入 ip, 接着第三个参数定义一个回调函数 callback, 这个 callback 没有参数,所以可以直接输入小括号,然后箭头 再输入大括号。接着我们在函数题里输入 controllock server is running at hashttp 冒号两个斜杠,然后就是 ip 的变量, 冒号,最后 pot 的变量, ip 和 port 变量需要用特殊符号包起来,这样就能输出他们的值,而不是 ip 和 port 的字面。 ok, 代码的部分就完成了。先保存一下代码, 你需要记得这个代码保存在哪一个文件夹里,因为等一下我们会在 termin 那里切换到保存 server the jazz 文件夹,然后用论指令去执行 server the jazz。 那现在我们去 termin 的执行一下这个代码,先 打开 vs 课里的 terminal, 点击 view menu, 然后再点击 terminal。 现在我们用 cd 的指令切换到 server 的 gs 文件夹,先输入 cd, 然后要切换的路径, 然后输入 l s, 确认 server 到 j s 是不是在文件夹里。 嗯, server dot jazz 是在文件夹里的,那下一步我们输入 no 空格 server dot jazz, 然后按下 enter 键,启动 no jazz 服务器。 如果论 g s 服务器正常运行,就会显示这一行字,这是论 g s 后端程序的地址, 这个地址后面是带着端口号的,所以等一下我们 copy 这个地址的时候,也要把端口号一起 copy, 不然我们就访问不了我们的后端程序。我们先 copy 这个地址,然后粘贴到 chrome 浏览器访问一下,看看论 jazz 服务器会不会给我们反馈。 hello from the jazz server 的字符串。 嗯,页面显示 hello from note js server, 这是从 note js 返回的字符串。 那就意味着我们成功把那 gs 后端程序给运行起来了耶。编写那 gs 后端程序和编写前端交换式程序有点不一样,那就是每一次我们更新完的 gs 服务器代码都必须重启服务器, 不然更新后的代码不会被调用。 notice 不像前段加号处那样,更新完代码刷新页面就可以看到更新了。 notice 必须重启才能看到更新,给你演示一下,在这里输入二,然后刷新页面。 嗯,你看更新后的信息是没有被打印出来的,那我们现在来重启一下服务器。首先我们需要停止服务器,我们在 tomi 那里按下 control 和 c 键, 现在服务器被停止了,接着按向上键,找出上一个输入的指令,确定是 not server dodges, 就按 enter 键执行。当然你也可以直接输入 not server dodges。 服务器现在启动了,那我们再刷新页面看看。 嗯,这个页面显示的制服串是我们刚更新过的制服串,所以这也就证明了每一次更新代码后都必须重启服务器要切记这一点。 希望这期视频能让你对着 jas 后端服务器有更进一步的了解,我会在下个视频继续和你分享。 no, jas 服务器是怎么辨别 get 请求和 pose 请求的?还有这两种请求实际上又有什么区别呢?我会在下个视频一一为你揭晓, 不想错过的话记得订阅关注频道。如果觉得这个视频对你有帮助,希望你也能帮我点个赞,因为每一个赞对于我 来说都是鼓励和前进的动力。好的,那今天我就分享到这里,我们下个视频见。拜拜!

上两节教学我分享了 ngs 后端程序要怎么识别和处理 get 请求, get 请求一般用来从服务器获取资源,像下载 hdm 源代码、照片或者视频等等。学完了 get 请求,很自然的接下来就会选 post 请求。 这两种 http 请求是最常见的,也是你在后端程序里必须掌握的知识点。学会了 get 和破请求,基本上你就打通了前端和后端互换信息的通道,这也意味着你正式步入新的里程碑,向前端程序开发挺进。 破损球一般用来向后端程序提交数据,像我们提交登录信息或者创建新账号程序,都是用 hasttp pose 球把数据从客户端传递到后端服务器,后端服务器这时候就需要从破醒球里提取请求体玻璃的数据。等一下我会在舌下的环节给你演示这个部分 除了能从表带里提交数据, posing 球也能提交 jason 或者 x m 数据,同时也能用 posing 球上载文件,这些操作都属于 pos 型球的范畴。今天实操的环节,我们一起来制作一个简易版的登录页面,加后端处理 前端的部分。登录页面有两个输入框,是让用户输入用户名和密码,然后再外加一个提交按钮,用来提交表单。后端的部分则负责接收从前端发过来的请求数据,然后进行用户名和密码验证。 如果验证成功,前端页面就跳转至登录成功页面。如果登录失败,就跳转至登录失败页面。 好的,那现在我们进入实操的部分。今天的工作目录是 a piece 零五第五集,先去创建这个文件夹, 今天的教学我会在第四集元代满的基础上再添加三个页面。所以接下来需要把第四集的内容复制到刚创建的文件夹里,全选这里的内容 copy, 然后粘贴到第五集的文件夹里。 好的,工作目录准备好了,可以开始编写代码。接下来要创建三个 hdmi 文件。 第一个是 login 到 h t m l, 里面会有一个大标题和一个登录表单。第二个文件是 login success 到 h t m l, 里面有一个大标题,显示成功登录。最后一个文件是 login file 到 h t m l, 用来告诉用户登录失败。那我们来创建第一个文件,先将它保存,文件名是 login dot hdml, 再来创建第二个文件, login 横杠 success dot hdml 也将它保存一下。 最后是 login 横杠 fill 的 hdml, 我们先从这个 login field 还是 d m l 编写代码,插入 h d m l tag body tag, 最后是 hash one tag。 在 hash one tag 里,我们输入 login field please try again login field html 内容搞定了,我们 call 比一下这里的内容,然后粘贴到 login success 的 html, 改一下 hash one tech 里的内容,将它改为 login success。 然后把刚才 copy 的内容粘贴到 login 到 hastml, 把 has one technically 的内容换成 login。 接着我们在 hash one text 上面插入一个表单 form, 我们需要在表单插入两个属性,一个是 method, 一个是 action。 method 是用来告诉表单是要发 posing 球还是 get 请求。一般表单是用 pose 方法提交数据,所以我们把 method 设置成 post。 action 是用来告诉表单 post 请求要发到后盾哪一个 url, 我们在这里输入斜杠 process 横杠 login 表单,在提交的时候就会把数据发送到这个 url。 接着我们再放表单里,插入两个输入框和一个提交按钮,这些元素都是用 input 去实现。先来插入用户名的输入框, input type 属性是 text, text 代表显示输入框,然后 name 是 username, 这个 name 属性是用来让后端程序识别这个数据,是用户输入的用户名。再插入一个密码输入框, input type type 属性是 password, password 类别会让浏览器显示密码输入框。接下来是设置 name 属性 等于 password, 最后再添加一个提交按钮, input tag type 属性是 submit, 这代表是一个提交按钮,然后再用 value 属性设置按钮上的文字。 嗯,新添加的三个页面就搞定了,现在去 server dog jazz 添加这三页 get 请求的路径。我们需要确认,当用户在浏览器浏览这三个页面的时候,是显示正确的内容,而不是四零四页面不存在的提示。 好的,现在打开 server 到 gs, 添加新页面的 get 请求路径, 复制一下这个 else if, 然后粘贴,再粘贴两次。因为我们一共有三个新的页面,所以需要添加三个新的路径。把 above 换成 login, 下一个 else 的额报也要更改,改成 login 横杠 success 这里也一样需要更改,改成 login 横杠 fill 新的 get 路径我们就加好了,现在打开 terminal, 启动 jazz 服务器,测试一下这三个新的路径。 先去掉第五集的工作目录,然后输入 not server 到 js, 启动服务器。 服务器启动了,那现在我们去浏览器浏览 login 到 hdml 页面, 嗯,能正常显示 login 的 hdml 里的内容。但是忘了给输入框添加一个 label, 用户就不知道哪个输入框是用户名,哪个是密码。等一下,需要为这两个输入框添加 label, 那我们先去看看 login success 和 login field 的页面, 嗯,都能正确显示页面里的内容。那现在我们回到 login 的 hdm 添加 label。 在输入框的前银行插入 label tag, 内容是 user name, 然后在 label tag 里添加一个 for 属性, 将它设置成优色 name, 这样设置就是将这个 label tag 和 id 为 username 的输入框绑定 密码。输入框也需要添加类似这样的 label, label 的内容是 password, label for 属性是小写 password。 好的,现在直接去浏览器浏览 login 到 h t m l。 这一次我们不需要启动服务器, 因为刚才我们只更改了静态的 html 文件,并没有更改到 gs 后端的代码。 嗯,现在输入框左边显示了对应的 label, 这样用户就知道该输入什么信息了。接下来我们要让 note j s。 接收和处理从登录表单传递过来的数据。先切换到 server the j s。 我会在 alt 部分添加处理 pose 请求的代码。 if 语句是处理 get 请求的代码,基于我们的程序目前只接受两种请求法,所以用 ifl 语句就足够了。 好的,现在开始在 alt 部分编写处理 posing 修的逻辑。首先我们需要判断 pos 选修的路径,这 我们是让登录表单提交的时候把数据发送到斜杠 process 横杠 login 的路径。所以这里我们需要判断 url 是否等于斜杠 process 横杠 login? 先插入一个 if, e, g, url, 三个等于 斜杠 process 横杠 login。 如果是登录表单发过来的数据,那就在下面开始提取请求题里的用户名和密码。 现在先来和你讲解一下前段的数据是怎么被传递到后端的,因为这涉及到接下来要写的代码。不理解这个概念,接下来的代码就没办法编写了。前段的数据需要 到互联网传递至后端,你可以把互联网想象成一根大水管,我们的数据就像水一样,在传输的时候需要通过水管流向 not just 后端服务器。这个概念在 not just 称之为 stream 数据流。 前端提交的文本数据在进入大水管前,会从文本转换成二进制数据,然后流向 n j 抽灯服务器。在传递的过程中,数据源会被拆分成好几个部分,然后分批发送,最后呢, j s 在另一方分批接受这些数据。 当数据分批抵达诺 js 服务器的时候,这些数据会先被储存在一个缓冲区 buffer, 这个缓冲区其实是 rem 里被划分出来的一片区域。之后呢, js 会根据情况把缓冲区内的数据传送到程序里,让程序开始读取这些数据。使用缓冲区 的好处是他可以控制数据流的速度。当数据流流向后端程序的速度超过程序能读取的速度,这些来不及读取的数据就会先被保存在缓冲区里,等待程序读取。 如果数据流来得慢,数据也需要被保存到缓冲区里,直到数据达到一定的量,才开始让后端程序读取。 有了缓冲区,后端程序在读取请求数据的时候就能不慌不忙的有序进行。一个比较常见的 buffer 应用场景就是 youtube 视频播放器, 如果网速慢,在打开视频后会看到缓冲的提示,这说明 youtube 播放器在等待缓冲区里的数据达到一定的量才开始处理并播放视频。如果网速正常, youtube 播放器就会一直不断的下载被拆分成好几个部分的视频,然后保存在缓冲区里等, 等待播放器读取。好的,相信你现在对数据流怎么个传递和接受有了初步的概念,那我们继续编写 pose 求的代码。程序是分别读取缓冲序列的数据,所以我们需要创建一个 array, 每读取一次就把刚读取的数据保存在 array 里。 最后我们会将 alright 分段数据合并,变成一个完整的数据。先创建一个变量 body, 然后将空 alright 赋予 body。 这个方括号是用来创建一个 come rate。 接着我们需要插入两个监听器,一个用来监听缓冲器的一个数据是否可以读取,另外一个监听器是用来监听请求数据是否已经全部被读取。先插入第一个 request 监听器, request dot on 小括号。这个监听器需要提供两个参数,第一个是要监听些什么,然后第二个参数是毁掉函数 call back。 我们要监听的是 data, 输入 data 字符串。 一旦缓冲数据可以读取,监听器就会调用第二个参数里的 combat, 这里输入一个箭头函数, 箭头函数需要提供一个参数,我们将它命名 chunk, 这个参数会储存部分读取的数据。接下来我们在函数题里将我们分段读取的数据添加到 body already, body the push, 然后在小括号里输入 chunk 第一个监听器。好了,那接下来我们再指入第二个监听器 request dot on 小括号,现在要监听的是 end, 然后在第二个参数输入箭头函数。 这部分很重要,因为这是分段数据从 buffer 转换成程序能识别和调用的步骤。现在 body already 有我们的分段数据,先打印出来让你看看 control the log body 来重启一下服务器,然后去登录页面提交数据。 他们呢?这里显示耳瑞里有一行数据,但这一行数据我们看不懂,因为他是缓冲,包括类型数据。等一下我们会将它转换成字符串。 我们提交的数据量很小,所以 body already 只出现一行数据,如果数据量很大的话,像上传视频 body area 就会出现很多行数据。接下来我们来合并一下 body already 的数据。 body 等于 buffer dot concate 小括号, 然后在小括号里输入 body buffer 到 content 语句是用来合并 body already 的 buffer 数据合并完之后,分段数据就会变成一个完整的 buffer 数据,最后我们需要将它转换成字符串,直接在后面添加 dot to swing 就可以了。再重启一下服务器,看看这一回 body 变量里的数据是不是我们想要的数据。 再提交一次数据, 嗯,提交上来的数据从我们看不懂的 buffer 类型变成了字符串。你看,这就是刚才我们在登录页面里提交的用户名和密码,这样论 jazz 就能进一步处理这些数据了。接下来我们需要将这个字符串拆分,这时候就需要导入 query stream 模块了, 因为这个模块里有一个函数能帮我们拆分这一行字符串。先创建一个 q s 变量,等于 require query string, 然后我们用 q s option 里的 pass 函数进行字符串拆分, 这个 pass 函数会返回一个 object。 我们再一次把 pass 函数返回的 object 赋予 body。 现在来看看 body 里有什么数据。重启一下服务器,然后提交表单。 嗯,我们看 在这里显示一个 object 里面有 username 和 password 属性,这样我们就可以调用 bodied username 和 bodied password 来获取用户名和密码了。 好的,接下来我们插入 if l 数据来验证用户名和密码,这里我们就不做复杂的验证了。一般账号验证需要连接数据库,今天只要提交的用户名是 john, 密码是 john, 一二三,我就算他成功登录。 在 if 的小括号里输入 body, the user name, 三个等于小写状, 然后两个 n 符号 body 的 password, 三个等于小写 joint 一二三。 如果用户成功登录 note j s, 就会命令前端跳转至 login success 的 hdmi 页面。要让前端跳转至其他页面,我们需要将返回的状态码设置成三零一。 response dot status code 等于三零一。除了设置状态满,还需要设置头部信息。 response dot set header。 第一个参数是字符串 location, 第二个参数是跳转的页面 斜杠 login 横杠 success 的 html 负重 这两行,然后粘贴到 als 的部分。因为登录失败后,浅端礼盒跳转至其他页面。 把 success 换成 fail, 让前端跳转至 login 横杠 fail 到 hdml 页面,最后在 e fail 主机下面输入 response 到 and 发送响音。 ok, 现在我们来测试一下。先重启服务器,然后提交登录表单。 这一次我们先输入错的账号。嗯,因为输入的用户名和密码不对, 页面最终跳转至 login fail 的 h t m l。 这一次我们输入正确的用户名和密码。 嗯,提交正确的登录信息,最终会把我们带到 login success 的 hdml。 刚才给你演示的登录页面和后端,是为了让你以最快的速度了解 no jazz 是怎么接收和处理来自前端的请求。所以我并没有在登录页面做过多的美化。 你可以将之前用 css 笔画过的登录页面和今天学到的知识点结合,做出一个比较好看和可操作的登录页面。你可以把自己的作品用 q pen 发到自学编程社区里,供其他同学欣赏和学习。今天的视频就到这里。

人人都能做前端如何搭建一个外部测试服务器?以 no 的 gs 为例,先下载 no 的 gs, 官方的下载链接是这个, 在浏览器打开这个链接,有两个版本可以下载,一个是推荐版,一个是最新版。 我下载推荐版, 下载完后安装都的 gs, 在弹出的安装界面里点下一步,进入许可协议界面, 把同意许可协议勾选上,如果不勾选不让安装,然后一路点击下一步,直到安装成功。 安装成功以后还要安装一个 httt 服务。按温家二组合键,打开运行对话框窗口,门式键盘上顶着 windows 旗子的那个键, 在文本框中输入 cmd, 打开命令行运行 npm, 因此到 agttp sever 杠技命令安装外部服务 http, civ 安装好以后,再命令行切换到项目目录, 我的项目在这个目录下运行 hgtp 杠 server, 开启外部服务,在浏览器缝 http 冒号双斜杠幺二七点零点零点幺冒号八零八零八零八零是默认端口号 访问一个文件,测试一下, 如果能正常显示就大功告成了。

无论你是前端工程师,后端工程师还是全站工程师,都希望有一个开箱机用的 api, 后端服务不用重复照轮子,一天时间就能完成数周的后端 api。 本视频使用 starp 用几分钟开发一个 crv 的例子。首先我们去了解 starp 项目的目录结构,然后定义 api 需求,创建模型和内容,了解这三个核心的主见,调用 api。 最后查看生存代码, 我们看一下叉 p 项目的目录结构啊,这是他的项目。咖啡杆是配置,这个是管理端的这个配置, 这是 api 的配置,这是数据库配置,数据库包括这个 ip 端口,用户密码,米德威尔中间键插件的配置 的配置。 ip 端口那是款咖啡杆,那是数据库的配置。 no 的包的依赖帕布里克静态资源文件有 dmaj 这些相应的资源,静态资源放这里。 acrc 呢,就是原代码,这个是对管理端的 定制,定制扩展,这个是 api 这次用的最多的,在管理端的这个数据建模代码生存就是生存到这个里面,后面我们生存以后再回来看,这是扩展,我们扩展插件的时候,在这个文件夹下面, ok, 我们举一个在线课堂的例子,这是一个结构图,由老师、学生、管理员角色,我们添加一个班级,实现班级的 crud 操作,我们先启动 他的服务,用开发的开发者的模式去启动,启动成功了,这个是管理端的路径。 我们先在 plus 音乐里面创建一个模型,克拉斯用的模型 会自动自动生成一个 apid, 这个 id 就是一个在数据库里面实际的一个表明。 继续添加几个字段内么字段再添加一个字段 描述这段微不行,再添加一个,一个硬的性的 marks 优等斯大最多写成真心。 添加完成以后飞利息,然后保存,这个时候再进行同步,我们看他发生了什么事情。稍等一下, 同步完成,我们回到代码界面, acrc 下面发现什么 生成了所有代码 mvc 的看错了,看错了,路由 sr, service 流沙不,然后 继续他的奇迹啊。在康腾的 manager 里面选中刚才生成的 classroom, 还能够给他添加添加数据啊。 max 一百吧, c 五,他这个 c 五呢?实际上他是保存的是一个草稿啊,保证是个草稿,真正要能返回数据的话,要跨个意思发布。 发布以后啊,然后我们给他设置一个权限,可以访问在优势权限这个插件里面,肉丝帕布林这个插件,我们去添加一些 访问的权限,五个权限真商改,查好,创建,查找,更新,删除,并且也是 get, 找一个,那个是找全部, 找全部,这个反正也只有一个啊。谢我一下,我们看看能保温不? 完了吧,看这个数据就完成了,花了多长时间?然后我们看好他支持几个? 这是五个哈,五个,五个类型的接口,五个接口看这里啊, get 两个。 get 后视特是上传 五个接口自动生成原单嘛?自动生成 this game。 数据描述 弄错了,这个是控制器陆游。


哈喽,大家好,我是小刘,本期视频的话主要是分享在工作过程中常用的第八个操作, 用 idea 的话,很多小伙伴就是头大,每次报错的时候找不到对应的代码位置,后端代码位置,那么本期视频的话就会详细为大家来解除这一块的烦恼。首先我们来看一下 什么叫打断点,什么叫断点,当我们打断点的时候,代码就会停留到对应的这一行,看一下效果吧, 效果很重要,结果一看就一目了然。 断点的话就会首先的话他就会停留到这一块,就可以一行一行的查看他会发生什么状况。打印第一行,第二行,知道程序走到这一块之后会发生什么,这就是断点的作用, 看一下下一个的哦。介绍一下 假设我们来看一下这一块,既有判断的条件,又有打印的一些需求,我们现 来模拟一下,有一个场景,我们需要在这一块手握不动,不改变圆满的情况下,我需要动态的改变 a 的值,让他走不同的流程, 那么我们通过打断点 debug 的形式也可以实现这一过程,我们怎么来实现呢?我们按住 shift 鼠标左键, 然后来看一下这每一块的选项是不一样的,假设我现在什么都不选,当,那么他是现在情况下的话,他会变成一个绿颜色的一个圆圈 来运行,去看一下结果是什么样子的, 怎么都不停,嗯,怎么会出现这种情况,他怎么都不停了,直接就运行到下一步,运行完了,那么可以看到他会多一行的内容,他会打印出我在第几行 设置了这个断点啊,这是不是有点鸡肋?我自己打的那一行,他肯定肯定知道,那么我们现在换一个操作,他实际上 可以看一下,实际上有一点不同啊。对,我们演示按住 shift 的左键,它是选择的,如果是选择 thread 的话就是当前线程, alt 的话就是所有线程。 如果我们选用这个 condition 的话,就是如果有所有的逻辑值, if l 词啊,或者是只要是返回值是不尔值的话,我们就可以在这里加条件,我们就可以动态的修改这个值,就可以,就是刚才所说的 可以动态的修改不动,圆满的基础下来修改这下面的值, a 等于三, 这个当一下此时就变成了红的了,是否是红颜色还是黄颜色的话, 取决于选择这一个值是否在当前形容下留下 a 等于三的话,就是修改逻辑值,修改条件里面的值, 预期一下,看一下结果, 它会走到这一块,它会给你一个判断你是否是修改原来逻辑,是选择是,那么它就会把值修改成 a 三, 那么他就会走 else, 那么原本的逻辑的话是走这一块儿, 它会打印一个 a 的, 是现在的话就是它会打印是 a s 的流程,那么我就是没有动原代码情况下改变逻辑值,这是非常有作用的。当一个程序启动的时候,嗯,项目比较大的话,启动比较麻烦的时候,我就可以通过 打断点的方式改变 condition 这个条件值,让他走不同的流程,那么我就可以实现看不同流程下哪些值的变化, 这就结束了,来看一下下一个断点方法。断点啊,往这边打写不清楚来还有什么作用呢?我们当我们在方法上面点一个断点,他就会变成一个 引起的红心分享,那么此时的话它就会它实质性的作用就是会方法运行的时候,它会运行到这个方法,从开始到结束, 首先来看一下它的效果是什么样子,就一目了然了。 它的作用就是首先它会运行到代码的第一行哦,我们让这个断点走完, 他就会到方法的最后一行,那么他就会从方法的开始到方法的结束,他会给你停留到这一块,那么你就可以看整个方法过程中他 运行到哪一块的流程,他走他代码走到哪一块,以及在这个方法过程中他干的时候,你就可以查看这个方法 有什么作用呀,或者是值有什么变化,可以在方法上面打断定它还有一个作用 来说我们此时是在这个接口上面打一个断点,但是我并不知道 它具体的实线类到底是哪一个,如果它的实线类比较多的话,我也不知道它跳到哪一个实线类,那么这种情况下我们也可以通过打断点的方式来实现,来运行一下, 好,他就运行到这一块了,我们点击 a 点,下一步 啊,他就会运行到他的实线类里,我们就可以找到这个实线类,那么他还是这个原理。我们来看一下, 实质上就是他从这个方法的开始到那个方法的方法的结束,那么这个方法什么时候结束,当然是到他的实现类的结束, 就可以清楚的看到他跳到了哪一个时间内,就是那个是比较重要的,就是在方法上面加断定, 我们下一个来看一下我们给 异常加断点,当会出现什么呢?模拟一个场景,就是我们知道某一个异常会抛出,会抛出一个异常,但是我们并不会 去一个一个从日志上去找,那么会像现在这种情况下,假设这一块代码 当 object 等于 no 的时候,他可能会抛一个空指针异常,那么抛空指针异常的时候,我们通常是会在控制台或者是找一些对战信息,然后定位到哪一块报错了,那么嗯,我们也可以通过第八个方 是来实现这一过程,那么怎么实现呢?来给这一块, 然后点击 except break pointers, 我们来提车一个,第二个, 添加一个和第三个。那么刚才报的错误是什么呢? no point to the search 不止这一张, 然后编上去,其实就是它捕获捕获异常,当程序出现控制制异常的时候,它就会定位 对应的代码处,我们来看一下效果, 哎,看一下刚才听见上去没 ug 这个能 point 的这个方法啊,这个方法没打开,打开一下 来看一下效果是什么样子的,他会出现什么结, 结果呢? 他会告诉你他这左边有一个闪电的标志,他会报告诉你抛了哪一个异常,原因是什么。 java 的控制针异常 仪式 o 等于 no, 这就非常清楚的告诉你他的抛抛异常的代码位置在哪,以及他抛异常的原因是什么,这样的话就不用在控制台一个一个去找,这个就是异常断电的好处,我们来看下一个断点, 属性断点,把这个先点开,属性断点的意思就是我需要观察某一个属性前后变化,在哪里 改变我熟悉的值。假设有一个场景,就是我知道 h 在哪一块,哪一个地方,把我 h 给我改了,这个值给改了,我们怎么看呢?它会出现一个小眼睛, 就是观察的意思,它会观察 age 在哪一块,代码哪一个地方,把这个属性改了,来运行一下,看一下效果如何。 返回加载,重新加载一下 啊,他就会首先创造对象的时候,他会传出一个 age 十 a 值等,此时 h 等于十八的。这是我第一次修改属性 a 值的值是在对象的创建的时候,通过有参的构造方法来改变 h 的值, 那么第二次改变 age 的值是通过 set age 的方法, set age 这个方法来改变 age 的值, 那么这一个端点非常好的作用就是我可以查看 age 到底是在哪一块,通过哪一个方法来改变它的值,这样的话就不需要去 找它对应的位置,是非常方便的。介绍了几个打断点的位置之后,我们来想 细来讲解一下。打断点的时候它会出现很多的内容,比如是我们来举个例子,再给方法打几个断点,看一下 method, 也随便打几个断点, 开箱启动一下,或者启动一下来看一下效果, 效果讲的话肯定是比较好的。 首先我们可以看到有几个位置是特别严重的啊,比如是这几个位置, 讲一下这中间一些按钮的作用,这一个的作用其实是它会运行到下一个的流程,如像是这一块的内容呀,或是这几个它的有什么作用? 接下来主要是讲解这几个按钮的作用有哪些作用?首先我们来看一下 遇三角的这个作用,就是当我运行它的时候,它会运行到断点的下一个断点是什么,它就会运行到下一个断点 switch, 看这个断点 要运行到此端点处, 再运行一下, 来看一下其他的作用是什么呢? 这一个的作用其实就是当我点击 stop run 的时候,它就会停止第八个这一个两个点的作用就是它可以查看断点的一些基本信息, 就是在方法上面打断点,在行上面打断点有哪些, 以及在属性上面打断点时是哪些,就是 watch points 观察的作用,这个意思就是给异常,异常打断点 就是按着按着某一个脚本的这一块是跟刚才讲的那一块的内容是一 一对一呢,它就有一些标识,比如是闪电,闪电的表示。 watch 观察观察属性的断点在哪些,这个是给方法打断点,这个是给行打断点。 还有就是比如像这一块的他的条件是什么呀?或者是是否打印对战信息 是比较详细的,点击这个作用就相当于关闭断点。 那么这块有什么作用呢?当我把这个点击一个叉,一个圆圈,一个斜杠的时候,点击运行的时候,他会跳过所有的段子,直到这个程序运行完,运行结束,这就是左边 这一块的作用。讲完左边之后,我们来看一下右边的这这一块的内容是什么呢? 这块也是会一步一步向下执行,但是如果遇到方法的时候,比如 我先把这些断点都给清一下,要不是的话,他会跳出那个断点重新运行一下。 假设我这个方法有一个 public void past, 里边运行一下 vert, 测试 t e t, 看一下它的效果,测试它的一个效果是什么 啊?对,不能访问这一个,那么我就使什么呢? statistic 近排的当然是不能访问电话就可以了, 运行一下,哎,他们效果是什么? 这语音可能也比较慢, 这虽然是每一步每一步的执行啊, 但是他如果遇到了方法的调用的时候,他会跳过这个方法,并不会进入到方法体本身,看这个就结束了。我们来讲下一个下一个按钮, 它是会一步一步往下执行的, 它默认情况下会进入到方法方法里面,然后我们来看这个是上一步 就回到了,回到了我进入方法的地方, 我们的点击下一步下一步。 那么这种情况下的话,如果我们遇到了 g d k 的一些,嗯,原始的一些方法我们就不能用刚才的这一个,我们就需要进行强制进入, 然后我们再出来就可以查看 g e k 原码有哪些东西。我们再出来一下, 这就是这上面三个按钮的作用。我们现在先来讲一下 drop frame 这个按钮,它的作用其实就是当我点击 这个按钮的时候,我们来看一下效果吧。首先它会回到打断点的位置,哪一个地方调用了打断点这个方法 呢?他就会回到哪里,是不是非常,是不是非常好用, 我就可以知道我哪一个方法,我调用这个方法里面打印了断点,我们我一旦点击这个周 frame, 他就会回到打断点这个调用的方法,这个位置 我们来再看一下,一下一个按钮是什么? 此时断点的话是到了第一行,假设我鼠标的光标停留在 停留在这一行,那么我点击这个的时候,默认的时,它是会跳到最后一行,但是 我们看一下,我们看一下这一个的操作是什么呢?他会停留到鼠标定位的这个位置,鼠标在哪里他就会定位到哪里,接着我们鼠标的这一块就会定位到这一块,这是非常也是非常有作用的, 下一个就看这一个有一个小计算器的这个东西是什么呢?它一个 expression 表达式,那么它的作用是什么?假设我要知道 知道一些属性的值,也就是假设它是通过了 student 点 a、 d、 d 和放的这些操作, 这个的作用就是当然是给给 student, 由是由我定义了一个。首先我们来看一下这个东西是什么吧? 这个 a、 d、 d 是什么? a、 d、 d 相当于是给我模拟了,我没连数据库啊,我模拟了一个 储存了 list students, 我给这一个对象添加了一个 student 的对象,那么我需要查看这个对象里面有哪些值呢?我怎么查看呢?这个是非常好操作的啊,就是我需要查看一下, 我可以这样查看点 fast 回车 看一下,上一步 他就会 查看这里面的值是什么呢? 都可以找到我们刚才,嗯,这个值副值到底会有哪些东西?我们就不需要去 一个一个去找了。展示我们看一下, 我们看一下发展范围指是什么呢? 可以看它的返回值是什么?这一块是不是就可以特别方便? 当然可以看任何的一个东西,可以看它的返回指什么呢? 这个返回值什么都没有。 antifum, 你知道这就是它几个按钮的一个作用,这就是非常详细的给它展现了, 展现了我们刚才的这一块按钮仪,左边按钮以及右边的按钮的作用,这一个就是顶 bug 的作用。