nodejs之path && os && url

271 阅读4分钟

path

path模块提供了,提供了处理文件和目录的路径, path在node做服务端免不了要处理文件需要用到 path在打包和输出文件也需要用到

basename

basename 返回字符串,返回的是输入路径的最后的文件名 basename接收一个参数,文件的路径

const {basename}=require('name');
console.log(basename('./index.js'));
//basename不会管文件存不存在,都会返回最后的文件名

dirname

返回输入路径的目录名

const {dirname}=reuqire('path');
console.log(dirname('./index/txt.js'));
//打印结果
// ./index

extname

返回输入路径的文件后缀,如果输入的是目录路径则返回目录名称

const {extname} =reuqire('path');
console.log(extname('/index/index.js'));
//打印结果 .js
console.log(extname('/index'))
//打印结果 index

format

将输入的路径,拼接为字符串

const {format} =require('path');
console.log(format({
    root:'/', //未指定dir则使用root
    base:'index',//未指定base则使用name+ext
    ext:'.js', //文件后缀
    dir:'/home',//文件路径
    name:'index'//文件名称
}))

isAbsolute

判断路径是否是绝对路径 只有带盘符才会被该方法认为是绝对路径

const {isAbsolute} =require('path');
console.log(isAbsolute('D:/learnANDstudy/Nodejs/path/index')); // true
console.log(isAbsolute('./index/index.js')); //false

join

拼接字符串为路径

 const {join} =require('path');
 console.log(join('D:/','nodejs','index'));
 //打印结果
 // D:/nodejs/index

 //我们通常这样使用join,在打包的时候设定输出目录
 join(__dirname,'dist')

normalize

解析 . 或者 ..这样的路径符号

const {normalize}=require('path');
console.log(normalize('./index/../'));
//这个路径表示,当前目录下的index的上一层目录下,也就是当前目录
// 打印结果
// ./

parse

解析路径

const {parse} =require('path');
console.log(join('./index/txt.js'))
//打印结果
//{ root: '', dir: './index', base: 'txt.js', ext: '.js', name: 'txt' }

os

os提供了当前操作系统的方法和属性,os应用于node做服务端,处理cpu负载均衡常用

arch

操作系统编译nodejs的cpu架构,windows一般是x64编译

const os=require('os');
console.log(ops.arch);
//打印结果
 //x64编译

cpus()

返回当前设备的cpu内核信息

const cpus=require('os').cpus();
console.log(cpus);

freemem()

返回空闲的内存数量,以字节为单位

const fremem=require('os').freemem();
console.log(freemem);

homedir()

返回当前设备,主用户的路径 windows就是C:/users/Administrator linux是 /root/

 const homedir=require('os').homedir();
 console.log(homedit)

hostname()

返回操作系统的主机名

const hostname=require('os').hostname();
console.log(hostname);

platform

返回当前的操作系统

const platdorm=require('os').platform()
console.log(platform)

release

返回操作系统的版本比如:win10,win7,win11

const release=reuire('os').release();
console.log(release); // 10

url

nodejs提供给我们url模块用于解析和处理url

解析url的作用

 1. node做服务端时因为http监听到request事件,但是用户不可能只有一个请求,不同的请求就要请求不同的url,返回不同的数据,我们可以根据url模块去解析用户请求返回数据。
 2. 传统的服务端渲染是,服务端将页面和数据拼接好之后返回给客户端页面,通过url模块解析不同的url返回不同的页面

引发思考的问题

先看一下前端渲染页面的历史发展,1.传统的服务端渲染后端拼接好数据后返回页面,但是这种的缺点就是出现bug前后端问题混淆不清,2.通过ajax分离,前端通过ajax请求数据,但是每切换一个页面都要向服务端请求,用户体验不好。3,有了spa单页面,前端开发完成打包后只有一个html和js文件,但是用户的首屏优化不好,而且spa单页面不容易被seo抓取,所以还是要用到服务端渲染,但是如何避免传统服务渲染的缺点,就是在sp单页面的基础上做服务端渲染就有了同构渲染(srr)。

 同构渲染(ssr)的流程就是客户端向node服务端发起请求,node服务端接收到请求后解析url找到对应的组件(这就可能用到了url模块和path模块),node通过http(http模块)向服务端发起请求获取数据,将数据注入到组件然后将组件转化为html返回给客户端,此时就解决了spa页面首屏白屏和seo优化的问题

URL类

hash

获取url的hash值

const url=require('url').URL
const myurl=new url('https://example.org/foo#bar');
console.log(myurl.hash);//$bar

host hostname

获取路径的域名

const myurl=new url('https://example.org:8080/foo#bar');
console.log(myurl.host);//example.org:8080
consoel.log(myurl.hostname);//example.org
  //host 获取到的是带端口号的
  // hostname 获取的是不带端口号的

port href

port用于获取端口号,href用于获取完整的url

const myurl=new url('https://example.org:8080/foo#bar');
console.log(myurl.port);//8080
consoel.log(myurl.href);//https://example.org:8080/foo#bar

protocol

获取和设置url的协议

const myurl=new url('https://example.org:8080/foo#bar');
 console.log(myurl.protocol);//https
myurl.protocol='http';
console.log(myurl.protocol); //http

search

获取和设置url的?后的内容

const myurl=new url('https://example.org:8080/foo?name=admin');
console.log(myurl.search); //name=admin
myurl.search='name=user';
console.log(myurl.search); // name=user

URLSearchParams

SearchParams的Api提供对url的?后内容进行的增删改查,也可以通过实例化URLSearchParams进行使用

SearchParams的使用

 const myurl=new url('https://example.org:8080/foo?name=admin');

 // 查
 console.log(myurl.searchParams.get('name')); // admin
 //增
 myurl.searchParams.append('pwd','000');
 //删
 myurl.searchParams.delete('pwd');
 //改