【NodeJS 教學】NodeJS後端程序怎麼知道用戶瀏覽的頁面? (NodeJS GET請求 入門教學) | How to handle GET requests in NodeJS server

 https://youtu.be/gOPS_1jgaR4


☕ ☕ ☕ 如果觉得这些教学对你有用,那就请我喝杯咖啡吧! 我会继续为你创作更多免费的编程教学视频,让你轻松入门编程。 ✅ https://bit.ly/3kCOpFK ✅ (免费) JavaScript教程系列: https://bit.ly/310cHle ✅ 更多精彩的JavaScript入门课程: http://bit.ly/js-for-beginners ✅ JavaScript相关书籍: 1:The Definitive Guide: Master the World's Most-Used Programming Language - 7th Edition (强烈推荐👍) https://amzn.to/31s30uH ✅(通告)”Codetisan 自学编程社区“ 已经正式开通啦,三人行必有我师,同学们再也不用独自一人闷头自学编程了,快去社区里和其他小伙伴们互动吧! ▶︎ https://bit.ly/2AHylzN 🔆订阅我的YouTube频道,让你从一个0基础编程的菜鸟快速成为编程大师!🔆 http://bit.ly/2TBkXo1 ▶︎ 文轩解码更精彩的平台 ◀︎ ‣‣ Blogger :https://bit.ly/2yMz0PC ‣‣ Twitter: https://bit.ly/2R74FS1 ‣‣ Facebook: https://bit.ly/35crcmz ‣‣ Instagram: https://bit.ly/2KH6Wjw ‣‣ Github: https://bit.ly/2SHtsx4

#nodejs教学 #编程入门 #javascript


文字版内容:

Hi 大家好 我是文轩 欢迎再次收看文轩解码 等一下看完这个视频觉得它对你有帮助的话 记得帮忙点个赞 我们在浏览器和手机app里看新闻 看视频 还有刷社交网络 互联网每天都要生成海量的请求响应 每点一次赞 回一次信息 请求响应流程会在你不经意的瞬间完成任务 一般普罗大众 他们不需要知道请求响应的细节 但作为一名Full Stack Developer (全栈/全端程序员) 就必须清楚知道请求响应的周期 客户端 (浏览器、手机app) 是怎么发送请求 后端服务器该怎么响应 我会在接下来的视频和你分享这方面的知识 包括前端页面是怎么发送请求到NodeJS后端服务器 和NodeJS服务器要怎么处理这些请求 如果之前看过这个关于HTTP和HTTPS的视频 都知道客户端和后端服务器 是通过一个叫HTTP的通信协议进行数据传输的 HTTP是HyperText Transfer Protocol的缩写 中文叫超文本传输协议 这个协议规范了客户端和后端服务器 在请求响应的周期里该做些什么 这包括 在传输数据前 客户端和服务器必须先建立一个TCP链接 才可以互相交换信息 还有客户端在发送请求的时候 必须依照HTTP协议里请求格式 不然就会造成服务器没办法识别客户端的请求 换句话说 HTTP协议就是在帮助我们 标准化客户端和后端服务器的数据交换流程 不管是谁家的浏览器和后端服务器 只要它们想进行无障碍数据交换 就必须根据HTTP协议里的规范进行开发 等一下我会切换到Chrome浏览器 带你看看浏览器收发数据的全过程 当我们打开一个网站的首页 像 google.com 就在我们按下Enter键的那一刻 请求响应流程就正式被启动 一般用户是不会知道浏览器究竟在背后做了些什么 今天我就使用Chrome开发者工具 为你解密整个过程 先打开开发者工具 右键 Inspect 然后点击Network Panel 这里等一下会显示网页的请求和响应 现在去到地址栏这里输入google.com 当我下按Enter键 右边的列表就会出现各种请求 嗯 你看这个列表 满满的请求 我们来点击第一个请求 从这个Header Panel里我们能看到这是一个GET请求 我们刚才在地址栏里输入google.com 其实是命令浏览器去google.com 获取首页的HTML源代码 一般GET请求主是要从后端服务器里获取数据 点击Response看看返回的数据 嗯 这里显示的是首页HTML源代码 浏览器会根据这些源代码进行页面渲染 显示最终的页面 在General的部分还有其他的属性 像Status Code状态码 200代表请求成功 服务器正常返回该返回的数据 下面这里还有请求和响应的头部信息 我说一下Response头部信息里的Content Type 这里显示text/html 说明返回的数据是文本类别的HTML源代码 我们除了能通过GET获取HTML源代码 也可以通过GET请求获取 像视频(video/mp4)和 JSON数据(application/json) 然后浏览器会根据返回的Content Type 做适当的渲染 剩余的请求有些是去下载图片 有些则是下载JavaScript文件 它们都是用GET请求去获取这些资源 刚才演示了浏览器是怎么通过GET请求去获取HTML页面 我会在接下来的实操部分 从后端服务器的角度切入 解密后端服务器怎么针对客户端 发过来的请求进行处理和反馈 okay 那现在切换到VS Code编辑器 打开Terminal 先去到工作目录(working directory) 工作目录指的是当前工作的文件夹 我们今天的所有的文件都会保存在这个工作目录里 NodeJS程序也会从这里启动 今天的工作目录是episode03-第三集 里面有一个server.js文件 这是在第二集里编写的server.js 我把它复制到了这个目录 等一下我会在这个server.js基础上添加新的代码 快速给你温习一下这些代码 代码一开始导入了HTTP模块 然后用HTTP模块创建NodeJS后端服务器 服务器会在运行时监听端口3000 从这个端口收集来自客户端的请求 但是这个服务器不管你访问哪一个页面 它都始终如一的在页面显示一样的响应 这样的服务器不太实用 所以等一下我会针对这个响应做一些更改 接下来我们会在NodeJS服务器里添加3个HTML文件 服务器会根据用户想访问的页面读取对应的HTML文件 然后把这些HTML源代码返回到客户端 好的 现在开始编写代码 我们要添加3个新文件 第一个是index.html 第二个是about.html 最后一个是404.html index.html是我们的首页 里面会有一个大标题显示 "Homepage" about.html 里也会有一个大标题 这个大标题显示 "About us" 还有最后一个404.html用来显示页面不存 "404 - Page not found" 先创建第一个文件 保存一下 在工作目录里创建一个新的文件夹 等一下把所有的HTML文件都统一保存在这个文件夹里 将这个文件夹命名html 然后第一个HTML文件命名index.html 再创建about.html 最后一个是404.html 好的 所有的HTML文件已经创建好了 接下来我们开始在每个文件里添加HTML源代码 先插入基本html代码 <html> tag <body>主体 和<h1>tag用来显示大标题 然后把这些代码复制到其他的页面里 这样就不要重新输入了 回到index.html 首页的大标题是Homepage 保存一下 about.html的标题是About us 最后在404.html里显示 404 - Page Not Found okay HTML页面的部分我们就完成了 现在要开始NodeJS后端的部分 打开server.js文件 我们会在监听器这里识别前端发过来的请求 request object里有一个属性叫url 它可以返回请求页面的url 尝试打印request.url看看 然后再启动服务器 现在去浏览器输入随便随便访问一个页面 这是我刚才在浏览器访问的页面 hello.html和world.html 每当用户访问页面 NodeJS后端程序都知道用户想要访问哪一个页面 request里也有一个属性叫method 可以用来识别请求方法是GET还是POST 打印request.method看看 重启服务器 刷新一下页面 嗯 这是一个GET请求 那我们访问首页看看 嗯 这也是GET请求 所以现在我们知道如果搭配使用 request.url和request.method 就可以在NodeJS里得到用户请求的页面 还有请求的方法 接下来 我们用if else语句来判断用户访问哪一个页面 然后根据请求返回对应的HTML页面 先插入第一个if else语句 在if条件判断语句里判断response.method 是不是"等于"大写GET 如果是GET请求 再插入一个if else 语句 这是用来判断用户是访问主页 about.html还是其他的页面 我们把request.method和request.url赋予变量 方便等一下调用 const method 等于 request.method const url 等于 request.url 把request.method换成method 然后在这里判断url是否等于斜杠 这个斜杠代表根目录 也就是主页的意思 接下来要判断url是否等于/about.html 我们需要在else 后面加一个if 然后在小括号插入url 三个等于 斜杠 about.html 最后添加一个else语句 如果用户访问的页面既不是主页 也不是about.html NodeJS就返回404 告诉用户想访问的网页不存在 好的 所有的条件判断都到位了 那接下来我们要做的是 根据请求URL 去读取对应的HTML源代码 然后把这些源代码通过response object里end()函数 发给用户的浏览器 先创建一个sendResponse函数 用来统一读取和发送HTML源代码 const sendResponse 等于 然后输入箭头函数 sendResponse函数需要3个参数 第一个是文件名 第二个是返回给用户的状态码 第三个参数是response object 要读取服务器里的文件 我们需要先导入fs模块 fs是file system的缩写 导入fs模块后 就可以使用fs.readFile函数读取HTML文件 readFile函数需要提供两个参数 第一个是文件名 第二个回调函数 回调函数会在成功读取文件后被调用 文件名我们可以从filename参数这里获得 readFile需要我们提供文件的路径 不能只提供文件名 这里输入 点 点代表当前目录 也是就是我们的episode03文件夹 然后斜杠html 在输入一个斜杠 然后才输入文件名 当程序运行的时候 readFile函数就会去episode03文件夹里的 html文件夹读取对应的HTML文件 第二个参数是回调函数 先输入箭头函数 readFile回调函数有两个参数 第一个是error 另外一个是data 能猜到这两个参数的作用吗 如果成功读取文件 error值是undefined data会被赋予文件内容 要是在读取文件时报错 error就会被赋予报错信息 在函数体里插入一个if else 用来判断readFile是否成功读取文件 然后在小括号里输入error 一般在NodeJS里都会先判断程序有没有报错 这是因为如果readFile出现错误 这就会优先被处理 如果报错的话 我们将返回的状态码设置成500 然后用response.end()函数发送报错信息 一般后端程序不会把实际的报错信息返回给用户 只会笼统的告诉用户发生了什么问题 这是避免暴露过多的服务器信息 我们在end函数里输入简短的报错信息就可以了 “Sorry internal error” 我们还需要设置response object的Content Type 告诉浏览器返回的信息是什么格式 Sorry internal error是文本 可以这样设置 response.setHeader Content Type text斜杠plain if的部分好了 else的部分和if差不多 也需要设置状态码和内容格式 输入response.statusCode 等于 statusCode 这个statusCode是从参数得来 接着设置内容格式 response.setHeader Content-Type text html text斜杠html代表服务器会发送HTML源代码 最后用end函数发送读取的data response.end data 好的 sendResponse函数搞定了 现在要开始调用这个函数 先去请求页面判断的部分 然后在请求页面等于主页的 if语句里输入 sendResponse 小括号 第一个参数输入index.html字符串 这是我们要读取的首页HTML文件 第二个参数输入200状态码 第三个参数输入response object 接着这里也输入sendResponse 要读取的文件是about.html 返回的状态码是200 然后response object 页面不存在的部分 输入sendResponse 然后读取404.html 状态码是404 表示页面不存在 这个状态码估计之前在别人的网站也看过 然后最后一个参数是response object 好的 现在我们来测试一下刚才编写的代码 先把这一行删掉 然后重启服务器 在浏览器打开首页 嗯 现在是显示Homepage大标题 不再是之前的Hello From NodeJS Server 状态码是200 去about.html看看 嗯,也是显示About us大标题 状态码也是200 现在测试一下不存在的页面 尝试打开hello.html 嗯 浏览器会显示页面不存在的信息 返回的状态码是404 是对的 好的 今天关于GET请求的入门篇就分享到这里 下一集 我会继续和你聊GET请求偏高级一点的应用 看看GET请求还能变出什么花样 如果你是第一次观看我的编程教学视频 欢迎你点赞分享和关注频道 我会在每周五定时给你推送和编程相关的视频 让你从零基础轻松入门编程 好的 那我们下个视频见 拜拜


Comments

Popular posts from this blog

【编程入门】使用 HTML CSS 制作登录页面 (零基础菜鸟必看) | How to create a login form in html css

怎么制作网页?仅使用html css制作你人生第一个专属网页 (免费网页设计教程) | How to create a website for free | 网页编程系列 第1集

2021 網頁編程自學小白要怎麼學才能真真快速入門編程? (內附路線圖+ 3個王牌技能) | Web Development Roadmap For Beginners 2021