我的账户
猩码学苑

专注C++开发菁英教育

亲爱的游客,欢迎!

已有账号,请

如尚未注册?

毛少涵2023-1-30

[复制链接]
微小星晨 发表于 2023-2-6 18:25:54 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
今日学习内容:
1.http模块创建web服务器不同url显示不同html页面
思路:用fs.readFile读取出文件内容,再用res.end响应给浏览器
静态资源加载

静态资源:css、js、img等等
网络中的绝对路径和相对路径(网络中一般都使用绝对路径)

绝对路径:

当href和src属性中的地址以/开头时就是绝对路径,该路径会自动补全浏览器地址栏中协议、IP/域名、端口号
<imgsrc="/assets/images/1.png"/>
<linkhref="/assets/images/a.css"/>
req.url得到就是没有协议、IP/域名、端口号的地址===>/assets/....
相对路径:

./:去掉当前路径中的最后一层,继续向下拼
../:去掉当前路径中的后两层,继续向下拼
绝对路径


相对路径的缺陷

案例:在不同的目录下启动服务器,并通过浏览器访问

①C:\Users\Administrator\Desktop\node\node-2\code\3-path

启动命令:node01-server.js
启动服务器后能够正常通过浏览器访问
②C:\Users\Administrator\Desktop\node\node-2\code

启动命令:node./03-path/01-server.js
启动服务器后无法正常通过浏览器访问
原因:控制台使用==当前绝路路径拼接readFile中的相对路径==,所以读取文件失败
在不同目录下执行01-server.js文件
执行结果:只有第一条执行成功,其余两条都执行失败。
原因:相对路径是以命令执行的目录作为起点的。
解决方法:使用绝对路径
路径变量

__dirname:获取当前文件所处目录的绝对路径
__filename:获取当前文件的绝对路径
特点:跨平台,自动处理路径分隔符/和\
Path模块(系统模块)

1)join()方法:能够根据不同参数不同系统组装不同的文件地址==

d:\node\day-2\code\03-path.js
2)sep属性:/或\,windows系统下是\;类unix系统下是/
3)dirname():获取文件路径(不包含文件名)
4)basename():获取文件名(不包含目录路径)
5)extname():获取文件后缀
其他方法:
读取文件优化

上例的缺点:每次读取文件都要写一堆几乎一样的代码
核心:在res对象上挂载一个新的方法,该方法可以根据路径读取文件并将内容返回给浏览器
art-template模板引擎

模板引擎介绍

介绍

模板引擎的本质是一种字符串拼接技术
按照规则在模板页(网页)上挖坑,布置数据规则
再将数据和模板组合成一个字符串
art-template基本使用

使用art-template模板引擎遵循以下步骤即可

1)安装/下载模板引擎(npmiart-template)
2)加载art-template模块(require)
3)准备模板页(一般是html页面)和要显示在页面上的数据(js对象)
4)调用模板引擎核心方法(template)组装模板和数据,得到一个字符串
5)将组装好的字符串返回给浏览器
1)安装/下载art-template模板引擎

npminstallart-template
2)加载art-template模板引擎

consttemplate=require('art-template');
3)准备模板页(一般是html页面)和要显示在页面上的数据(js/json对象)xml

js对象:{a:"Hello",b:"world"}
json对象:{"a":"Hello","b":"world"}
注意:

属性不加双引号或者加双引号均可,但是切忌不要加单引号。此处不会出错,但是其他的位置可能会出错。
html页面(模板页)上使用特殊标记({{key}}),将要显示数据的位置标记出来;此处的key就是js对象的属性
4)调用模板引擎核心方法

//参数1:模板文件路径---必须使用绝对路径
//参数2:要显示出来的数据---js/json对象
//返回值:数据和模板组装好的字符串
lethtmlStr=template(var1,var2);
5)将组装好的字符串返回给浏览器

res.end(htmlStr);
用户管理优化

目标:根据数组动态生成表格
1)下载\安装art-template
2)在服务器文件(server.js)中加载/导入art-template模块
3)准备模板页和要显示数据——在server.js中设置要显示的数据:

模板页循环显示数据(index.html)——注意:可以嵌套if来处理没有数据时的显示
4)调用template函数将模板和数据组装到一起
5)将组装好的字符串通过end方法返回给浏览器
表单提交(表单标签:form、input、select-option、textarea,表单提交有两种方式get(默认)和post(常用))

post表单提交1)post表单提交的必要条件



必须有form标签

action:表单数据提交的位置,必须是一种后端技术来接收
method:表单提交的方式,post(常用)、get(默认)
每个表单域都要有name属性和值
必须要有submit按钮来提交表单数据
2)后端接收---post方式

data事件:用来接收表单数据,表单数据会被切割成一块一块,data事件会循环来接收
end事件:当表单数据接收完毕后会自动触发,此时可以操作表单提交的数据
案例:接收表单提交的用户名和密码

1)创建表单页
2)创建服务器,显示post.html页面
3)在server.js中增加对/postData的监听,接收表单提交的数据
每种表单域提交的方式

表单标签:form、==input、select、textarea==表单提交的实际上是每个域的value值
特殊:

1.select-option:

name要定义在select标签中
value要定义在每个option标签中
2.textarea:

name定义在textarea中
value就是开始和结束标签之间内容
get方式提交表单

核心

将method值改为get就是get方式提交表单
get方式提交表单数据时,数据会以字符串方式显示在地址栏
显示方式:key1=value1&key2=value2&key3=value3&...
解决方案:使用系统提供的url模块来处理get方式的url地址


如果url.parse方法的参数2设置为true,则会将query中的字符串自动转换为对象形式
重点:在解析结果中有两个单元必须记住

pathname:当前请求的url地址,本案例中就是/getData
query:get方式提交的参数
get和post的区别(非常重要)

1.提交方式

get会将数据显式的拼接到url地址栏中(字符串)
例如:/form==?id=10001&username=heiheihei&passwd=123456&key=value....key=value方式传参,多个参数之间使用&符号隔开
id、username、passwd等等(键/key)都是表单域的name值,10001、heiheihei、123456等等(值/value)都是表单域的value值
post不会显示出来:通过requestbody传递参数。
2.传递数据量大小

post最小值是2M,理论上没有上限的。
get会受到浏览器的地址栏的限制。有的是2k(IE6),有的是8K(chrome)
3.应用范围不一样

回复

使用道具 举报

关注0

粉丝0

帖子50

发布主题
大家都在学
课堂讨论
一周热帖排行最近7x24小时热帖
关注我们
专注C++菁英教育

客服电话:18009298968

客服时间:9:00-21:00

猩码学苑 - 专注C++开发菁英教育!( 陕ICP备2025058934号-1 )

版权所有 © 陕西菁英数字科技有限公司 2023-2026