在node.js环境中,有两个全局变量__dirname、__filename
1.它们保存的是字符串
2.__dirname:表示当前js文件所在的目录:绝对路径 文件夹(directory)
__filename:当前js文件的目录:绝对路径
3.使用:经常利用字符串的拼接+,拼出一个绝对路径,当我们使用fs模块fs.readFile(path,(err,data)=>{})读取文件时,path通常是绝对路径。
让我们打印一下:
代码运行结果如下:
通过了解上面的结果,我们一般req.url前面拼接上__dirname,代表着文件所在绝对路径。
index.js文件:
index.html文件:
代码运行结果:
静态页面:
注意:当我们在index.html文件中添加一个img标签,我们会发现浏览器一直在加载中,没有办法停止转圈。
这是因为后端并没有发送将图片发送给前端,所以前端加载不出来,让我们打印req.url看一下网络请求的结果吧
我们可以看到服务器做了两次网络请求,但是我们的后端只写了一个网址,所以在做第二个网络请求时,浏览器一直都在加载中,因为它没有找到这个网址。
让我们把这个第二个网址写上去,看一下结果吧:
我们再为index.html文件的字体加点样式:
index.html文件:
index.css文件:
index.js文件:
代码运行的结果:
从上面的index.js文件,我们找出规律:
if (req.url == "/index.html") {
fs.readFile(__dirname + "/src" + "/index.html", (err, data) => {
res.end(data)
})
}
我们可以直接改为:
fs.readFile(__dirname + "/src" + req.url, (err, data) => {
res.end(data)
})
这样,我们就可以省去很多的重复代码。
总结:
1.一个网页的资源不是由一个网址组成的,它是网页内部在运行代码的过程中,会再去请求各种各样的资源,来组成这个网页。
2.一个网页是由多次网络请求加载,形成的
2.在http协议中,网络请求是独立的,每次请求完,就断开链接。
3.前端请求服务器和服务器请求后端的次数是不一样的,因为,前端请求服务器时,可能也在请求其他后端的网址
前端请求后端:
1.index.html
2.index.css
3.img
4.img(百度的图片)
5.favicn.ico(前端默认请求小图标)
服务器请求后端:
1.index.html
2.index.css
3.img
4.favicn.ico
运行结果: