【NodeJS 教学】NodeJS是怎么处理客户端发过来的GET请求参数 (node js获取http get参数) | NodeJS: How To Parse HTTP GET Query String

 https://youtu.be/7e1wQDBxxek


☕ ☕ ☕ 如果觉得这些教学对你有用,那就请我喝杯咖啡吧!
我会继续为你创作更多免费的编程教学视频,让你轻松入门编程。
✅ 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 大家好 我是文轩 欢迎再次收看文轩解码 今天NodeJS教学视频来到了第四集 这一集也是NodeJS后端程序开发系列的第四集 如果你还没看前三集 欢迎等一下去到列表里翻看 顺便提醒你一下 每一集的源代码在视频发布后都会上传到Github让你下载 Github的链接就在描述栏里 如果在编写NodeJS程序的时候遇到了问题 也可以去到自学编程社区里分享你的问题 社区里的同学和我都很乐意为你排忧解难 创建这个社区的宗旨 就是想让能大家一起互相学习 一起进步 我们在上一集说到了NodeJS后端程序 怎么识别普通的GET请求 然后针对这些GET请求返回HTML页面 其实GET请求还有另外一种用法 那就是让前端发送GET请求的时候连带着参数 一起发送到NodeJS后端 NodeJS这时候就可以利用 这些GET参数动态获取数据 那这些所谓的参数是怎么体现的呢 我先说说在什么地方我们最常见这些GET参数 相信大家都有网购的习惯 一般我们在搜索某种商品的时候 如果你有在意地址栏里的URL 通常都是一长串的字符串 接下来我会用Amazon.com去演示GET请求参数 其他网站像淘宝天猫和ebay的操作也是大差不差的 当用户在Amazon购物网站输入关键字搜索某件商品的时候 一旦按下Enter键 页面就会跳到搜索成绩 网页的地址从Amazon.com换成了这一个 系统在原来的网址后面添加了一些字符串 我们来拆解一下这个网址 我们将网址分成两个部分 以问号作为分界线 左边是访问的页面 amazon.com/s 这是搜索页面 问号右边就是GET Query String 也就是GET请求参数 这里一共有两个GET参数 它是以&符号作为分界线 第一个GET参数是k 它的值是我们刚搜索的关键字 第二个参数是ref 我猜Amazon是用这个参数记录我们从哪个页面搜索商品 Amazon的后端程序会根据这个k参数 返回和这个关键字相关的商品 如果手动更改这个k参数 你觉得搜索成绩会变吗 嗯 答对了 是会变的 假设我们将k参数的值从laptop换成table Amazon就会返回和table相关的商品 使用这样带有GET参数的链接有一个好处 那就是除了可以直接从链接里得知搜索关键字 更重要的是 用户可以把链接通过邮件或者信息发给好友 点击就可以直接去到table的搜索页面 而不是让好友先访问Amazon.com 然后在搜索输入框里输入table关键字 这样比发一个链接麻烦得多了 你说是不是 今天实操的部分 我们会用GET请求参数切换页面的语言 我会在上一集源代码的基础上添加这个切换语言的功能 让你体验一下GET请求参数是怎么发送和被处理的 好的 那现在我们进入实操的部分 今天的工作目录是episode04-第四集 先创建episode04-第四集的文件夹 然后从第三集的文件夹复制所有的内容 粘贴到第四集的文件夹里 这个文件夹里有server.js和一个html文件夹 html文件夹里有3个页面 等一下我们会复制这三页 将它转换成中文版本 全选这三个文件 copy 然后paste 重新命名一下新粘贴的文件 将copy换成-zh 这代表中文版本 然后将剩余的页面也改成这样的命名格式 好的 我们的工作目录准备好了 现在可以开始编写代码 首先我们打开刚才复制的文件 将里面的内容换成中文 全选带-zh的文件 先翻译404-zh.html 将里面404 Page not found换成404页面不存在 接下来将About us换成关于我们 最后将index-zh.html里的homepage换成首页 好的 那接下来我们开始编辑server.js 我们之前在createServer里编写了识别GET请求的代码 如果用户请求的页面是主页或者about.html NodeJS会返回对应的页面 如果请求页面不是主页和about.html NodeJS就会返回404.html 稍后我们会更改这里的代码 让程序读取GET请求参数 然后根据这些参数切换中英文页面 当用户在浏览器输入这个地址 NodeJS就会显示中文版的about.html 如果把lang等于zh换成lang等于en 页面就会切换到英文版 如果把请求参数拿走 系统会默认显示英文版 GET请求参数lang 是NodeJS程序需要捕捉的数据 那我们要怎么读取URL里的GET请求参数呢 答案就是 使用JavaScript URL object URL object提供了一些便捷的方法 能让我们快速获得GET请求参数 NodeJS官方也是比较建议 我们使用这样方法获取GET请求参数 获取GET请求参数的代码我们会在这里输入 因为它是属于GET方法的范畴 先创建一个常量保存URL object const requestURL 等于 new URL 小括号 URL object需要提供两个参数 第一个是当前访问的页面 这个数据可以从url变量获取 第二个参数是基本URL 基本URL指的是http 127.0.0.1 3000 基本URL可以从IP和PORT常量获得 我们把这两个常量移到上面去 然后输入http 冒号 两个// ip常量 冒号 然后port常量 我们把requestURL打印一下 看看这个URL object有些什么属性 打开Terminal 先去工作目录 然后启动服务器 输入node server.js 按Enter键启动 服务器启动了 现在打开浏览器 浏览我们的首页 复制首页的地址 然后粘贴到地址栏 这是我们刚打印的URL object 这都是URL的属性 有hostname port pathname等等 尝试在网址添加一个lang请求参数 问号 lang 等于 zh 然后刷新 先不管这个404 先说说URL object里的属性 这一次 在searchParams属性里的 URLSearchParams object出现了 lang zh 之前这里是空的 这就说明了URLSearchParams 有我们想要的GET请求参数数据 要想得到lang参数 我们需要调用searchParams里的一个方法(method) 叫get() 我把lang参数值打印出来给你看看 console.log requestURL . searchParams . get lang 通过这个语句 我们就能获取lang参数里的值 去浏览器测试一下 看看NodeJS能不能获取lang请求参数 先重启一下服务器 需要同时按下ctrl 和 c 键 现在来刷新页面 嗯 这个语句是可以获取lang请求参数值 我们尝试把zh换成en 嗯 这里显示en 证明这个get方法是可以获取lang请求参数值的 但是我们现在有一个问题 那就是不管我访问哪一个页面 只要后面加了lang请求参数 NodeJS服务器就会显示Page Not Found 这是为什么呢 我来告诉你 这是因为url判断的部分出现了问题 url常量值现在是包括请求参数的 所以第一和第二个判断语句都没办法被满足 只能跳到else显示404页面 很明显继续使用request.url已经不合适了 那我们还有什么选择呢? requestURL object里有一个属性叫pathname 我们可以用这个属性获取当前的页面路径 但不包括请求参数 首页的pathname是/ 那我们现在去about.html看看嗯 pathname显示/about.html 这正是是我们想要的路径名 这说明可以用requestURL object里的pathname作为替代 先把const换成let 等一下会在下面重设这个url变量 然后在这里输入url 等于 requestURL . pathname 来测试一下 看看访问about.html和首页的时候是否显示正确的页面 先重启一下服务器 嗯 现在这两个页面不再显示404 都能正确显示页面的内容 好的 404页面的问题解决了 现在我们要开始根据lang请求参数进行语言切换 先创建lang常量 const lang 然后赋予它requestURL . searchParams . get("lang") 定义完lang 还要定义一个变量叫selector 这是用来保存语言字符串 let selector 接下来插入一个if else语句 用来判断lang参数值 首先要判断lang值是不是等于null lang 三个等于 null 如果在地址栏里不提供lang请求参数 lang值是null 这正好可以用来设置默认语言 除了判断lang是否等于null 还要判断 lang是否等于en 两条竖线 lang 三个等于 字符串en 如果lang值为null 或者 lang值为en 都需要把selector设置成空字符串 接着再添加一个else if 语句 用来判断lang是否等于zh 如果是等于zh 就将selector设置成-zh 最后在else的部分输入selector 等于 空字符串 如果lang值是其他的值 NodeJS就默认显示英文版 接下来我们需要把selector变量 值入到sendResponse的第一个参数 这样才能让sendResponse函数读取正确的页面 先把index.html删掉 插入反引号 index 然后selector变量 .html 现在第一个参数变成了动态的文件名 当selector是空字符串 文件名就等于index.html 如果selector是-zh 文件名就会变成index - zh 把下面的文件名也改一下 记得要用反引号 好的 改完了 把所有的console log都删掉 然后重启服务器开始测试 我们先去英文版的首页 嗯 正确显示英文 现在尝试切换去中文 在后面添加/ 问号 lang 等于 zh 嗯 页面这里显示乱码 这是因为页面的字符集(charset)没设置好 所以浏览器才显示不了中文字体 我们需要在HTML文件的头部里添加utf8字符集(charset) 在这里插入<head> tag 然后meta charset 等于 utf8 其他中文页面也需要添加这些代码 先复制头部的代码 然后粘贴到各个中文页面去 这一次肯定不会再显示乱码 我们刷新页面看看 嗯 现在能正常显示中文标题 那我们去about.html的中文页面看看 然后切换到英文版 将zh改成en 嗯 是能正常切换到英文页面的 最后我们测试一下404页面 随便输入一个页面 abc.html吧 然后再把en换成zh 嗯 完全能依照GET请求参数正常切换页面 刚才我们是手动在地址栏里输入lang请求参数切换语言 现在给你布置一项任务 那就是在index和about页面里添加一个链接 让用户从现在的语言切换到其他的语言 比如说在英文页面添加一个切换到中文页面的链接 完成任务后你还可以在自学编程社区里留个言 告诉我答案 okay 今天关于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