大半夜睡不着...
今天用node写了返回客户端请求资源的http服务,确实发现了一些以前没注意到的问题。
第一个是在接收到请求的时候,解析完路径后,一定要判断请求的文件的后缀,以便选择对应的Content-Type。
第二个是要确保请求资源的路径正确。
我今天犯了一个错误是,在这个单纯返回请求资源的http服务中,当匹配不到资源时,返回index.html.
这就埋下了一个隐患:
当我从index页面通过location.href跳转到B页面时,由于判断后缀的switch语句中漏了对.html类型的判断,导致B页面直接返回了index.html,而此时B页面的路径是/B.html。
而B页面i拿到的ndex文档中的link标签发起css请求时,请求的路径在/B.html的基础上变成了/B/css/b.css,正确的地址应该是/css/b.css。node程序因此抛出错误而退出。
在调试的过程中,我也梳理了node中常见的几个路径:
__dirname:被执行的js文件所在文件夹;
__filename:被执行的JS的绝对路径。
process.cwd():运行node命令时所在文件夹的绝对路径。
同时也有前辈指出只有在 require()
时才使用相对路径(./, ../) 的写法。