嗨喽!小伙伴们好久不见,最近几个月一直在忙着搞比赛,好久都没有更新文章了,今天我又来啦!前几天复习Node的时候突然看到了这个知识点,关于路径问题的处理,首先我们得知道在计算机中路径分为“绝对路径”和相对路径,这影响到对资源的读写问题。
首先了解一下什么式绝对路径和相对路径:
绝对路径:绝对路径是指目录得绝对位置,代表该资源(包括:文件、图片等这些都可统称为资源)所存储的位置,通常是从盘符开始得路径。
例如:C:\Users\kkkkv\Desktop\web\NodeJS这就代表一个绝对路径,而有些小伙伴可能还有这样的疑问:www.baidu.com/xxx/xxx.png。那如果像这样子直接去网上拿取别人服务器上的资源,这个地址(www.baidu.com/xxx/xxx.png)算是什么路径呢?答案肯定是绝对路径,因为www.baidu.com这是人家百度服务器的绝对地址,相当于你是在百度这台服务器上拿取资源,如果哪天百度把你所引用的图片删除了,那么你所引用的图片也就无法正常显示出来了,像我们平时用的图片标签:<img src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Flmg.jj20.com%2Fup%2Fallimg%2F1114%2F041621122252%2F210416122252-1-1200.jpg&refer=http%3A%2F%2Flmg.jj20.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1669529804&t=e388a8c33c679b2ceea4c00d66990bfc">,直接拿取到的是已经存在百度服务器上的一张图片,当我们在本地打开自己写的网页时还是要通过发送网络请求去获取到该图片资源才能正常使用,否则该图片是无法显示的,毕竟它不是你的本地资源。
相对路径:相对路径就是指由这个文件所在的路径引起的跟其它文件(或文件夹)的路径关系,说白了就是通过./,../,../../这样的符号表示的路径就是相对路径。
学过物理的同学应该都知道参照物吧,我就以参照物作为类比,例如在文件A中需要引用一下文件B,那么使用相对路径表示就是文件B相对于文件A的位置,(../FileB/奔驰.png)这一个路径就是奔驰.png这张图片相对于a.html所在的位置,如果a.html相对于奔驰.png的位置发生了改变,那么在a.html中就无法正常引用这一张奔驰图片了。从而导致在网页中无法显示该图片。
言归正传,我们在node中为什么要使用path模块处理路径问题呢?其主要原因就是因为代码在运行的时候会以执行node命令时所处的目录动态拼接出被操作文件的完整路径,是不是不太好理解这句话?哈哈哈,看例子:
这是我连续对同一个文件读取了两次的结果,主要区别就是第一个readFile方法使用了__dirname,它代表当前文件所处的位置:C:\Users\1\Desktop\我的网站\NodeJS,然后通过拼接的方式得到文本文档的绝对位置,从而保证可以正确读取到test.txt中的内容。当前我是在NodeJs这个大目录下执行的node命令,所以没有产生问题。
当我通过cd..向外面退出一层再执行node命令时就出现问题了,如下图:导致这个问题的原因正是因为路径拼接失败,说白了就是没有找到目标文本文档的位置,导致无法读取内容,所以就报错了。
最后通过这一个演示也说明了__dirname的重要性,在实际开发中用path模块来处理路径问题也是很舒服的,总的来说资源的地址一定要小心,千万被搞错了,很可能导致无法找到资源。最好的方式就是直接提供完整路径,以防止路径动态拼接错误的问题。
感谢各位的支持,需要催更或了解什么内容可以私信我,可以一对一指导哦,尽量帮大家解决难题,避免迷茫,一起进步。。。