1)url模块
将请求字符串转换为对象
// let obj=url.parse(str);//将请求字符串转换为对象
// let obj=url.parse(str,true);//参数二为true ,将查询字符串转换为对象
// console.log(obj.protocol);//协议
// console.log(obj.hostname);//主机名
// console.log(obj.port);//端口号
// console.log(obj.pathname);//资源路径
// console.log(obj.query);//查询字符串
let {username,pwd}=url.parse(str,true).query;
// console.log(obj);
console.log(username,pwd);
2)querystring
将查询字符串---->对象
//查询字符串
// let str='uername=jack&pwd=123';
// let obj=qs.parse(str);
3)path
Join() 地址拼接
extname() 获取文件的后缀名
basename() 获取地址最后一个文件的名称
dirname() 上级目录地址
isAbsolute() 判断是否是绝对路径 true false
resolve() 将相对路径转换为绝对路径
静态资源:
路由配置后,客户端虽然可以访问不同的页面;但是页面里面的外部链接仍然无效,比如:link的外部css,script的src链接,image的src链接等都是无效的。
为什么这些资源是无效的?
我们一定不要认为,客户端请求了html或页面后,页面里面的外部链接就会自动请求得到;实际是,我们请求到html或页面后,浏览器在解析这个页面的过程中遇到外部链接,还会继续向服务器发请求,那么服务器就需要对这些请求进行处理(比如css,js,image等请求连接);这个处理的过程我们就可以认为是在处理静态资源。
静态资源的处理,其实和路由的配置非常相似,只不过静态资源都有指定的目录和特殊的后缀,简单处理如下:
let ext = path.extname(req.url); //获取请求路径的后缀
let basename = path.basename(req.url); //获取路径中文件的名称
switch (ext) {
case ".css":
buf = fs.readFileSync(`./public/css/${basename}`);
break;
case ".js":
buf = fs.readFileSync(`./public/js/${basename}`);
break;
case ".jpg":
case ".png":
case ".gif":
case ".bmp":
buf = fs.readFileSync(`./public/image/${basename}`);
break;
}
网站开发模式
网站的开发方式,目前来看主要有两种
a)服务端渲染(SSR server-side rendering)
i.服务端渲染的内容不是静态页(.html),而是模板页(.php,.jsp,vue 使用模板语法进行页面渲染,把动态数据解析为静态的html)
ii.数据来源是服务端
b)前后端分离
i.前台负责写html静态页,使用ajax请求来渲染上面的数据
ii.后台负责提供接口
注意:如果是前端端分离,则src,href,action等链接,一定要写全地址,比如http://localhost:3000/css/index.css。
如果是服务端渲染,则src,href,actions等链接,需要写路由配置的配置项,比如:/about,/list等。