node罕用内置模块(一)
1.nodejs的全局对象global
全局对象可看做是全局变量的宿主(局部属性设置了不可枚举),不必点语法,可间接拜访
罕用全局变量:
__filename:返回正在执行脚本文件的绝对路径__dirname:返回正在执行脚本文件所在目录timer类函数:执行程序与事件循环间的关系process:提供与以后过程互动的接口require:实现模块的加载module、exports:解决模块的导出
相似于,在执行.js文件的时候,将js代码放在了一个立刻执行函数外面,并传入了这些变量,所以能够间接应用这些变量了。
// console.log(global);console.log('fileName@',__filename);console.log('dirName@',__dirname);console.log('process.cwd@',process.cwd());console.log('process.env@',process.env);// 默认状况下 this 是空对象 和global不是一个对象console.log('this@',this);(function(){ console.log('fun@',this===global); // true})();
2.process模块
获取过程信息:
// 1.资源:console.log(process.memoryUsage()); // 内存/*{ rss: 20045824, // 常驻内存 heapTotal: 4476928, // 堆内存 heapUsed: 2686544, // 已应用堆内存 external: 889742, // 内部内存 应用的C++的罕用库 arrayBuffers: 9898 // 数组缓冲区大小}*/console.log(process.cpuUsage()); // CPU 零碎与用户操作cpu工夫片的应用状况{ user: 31000,system: 31000 }// 2运行环境:console.log(process.cwd()); // 运行目录console.log(process.version); // node版本console.log(process.versions); // node环境(v8版本、uv版本、zlib版本、openssl版本、ares版本、modules版本)console.log(process.env.NODE_ENV); // 判断是生产环境还是开发环境(undefined,在应用打包工具是,会主动配置)console.log(process.env.PATH); // 环境变量 console.log(process.env.USERPROFILE); // (局部平台应用HOME获取)获取用户目录 写脚手架工具的时候,利用cri命令的时候能够应用console.log(process.arch); // cpu架构console.log(process.platform); // 零碎平台// 3.运行状态: console.log(process.argv); // 启动参数console.log(process.argv0); // 快捷获取参数的第一个参数 execArgvconsole.log(process.pid); // 过程ID ppidconsole.log(process.uptime()); // 运行工夫
执行过程操作:
// 4.事件 订阅、监听事件process.on('beforeExit', (code) => { // 能够写异步代码 console.log(`beforeExit:${code}`); // 失常退出 code=0})process.on('exit', (code) => { console.log(`exit:${code}`); // 不可写异步代码 setTimeout(()=>{ console.log('exit timeout'); },0);})console.log('代码执行完了');process.exit() // 手动退出 不能触发 beforeExit 事件// 5.规范输入 谬误console.log = function(data){ // process.stdout 返回一个流对象 process.stdout.write('--'+data+'\n');}console.log(1);const fs = require('fs');// 创立一个流对象 管道 规范输入流fs.createReadStream('05-test.txt').pipe(process.stdout);// 输出流// process.stdin.pipe(process.stdout);process.stdin.setEncoding('utf8');process.stdin.on('readable',()=>{ let chunk = process.stdin.read(); if(chunk !== null){ process.stdout.write('data '+chunk); }})
3.path模块
罕用API:
basename() 获取门路中根底门路名称dirname() 获取门路中目录名称extname() 获取门路中扩大名称isAbsoulute() 判断门路是否为绝对路径join() 拼接多个门路片段resolve() 返回一个绝对路径parse() 解析门路format() 序列化门路normalize() 规范化门路
代码展现:
const path = require('path');// 1.获取门路中的根底名称 /** * 01 返回的就是承受门路当中的最初一个局部 * 02 第二个参数示意拓展名,如果没有指定,默认返回残缺的文件名 * 03 第二个参数作为后缀时,如果没有在以后门路中匹配到,那么就会疏忽掉 * 04 解决目录门路时,如果结尾处有门路分隔符,则也会疏忽掉 */console.log(__filename); // D:\Users\小江\Desktop\nodejs_test\06-path.jsconsole.log(path.basename(__filename)); // 06-path.jsconsole.log(path.basename(__filename, '.js')); // 06-pathconsole.log(path.basename(__filename, '.css')); // 06-path.jsconsole.log(path.basename('/a/b/c')); // cconsole.log(path.basename('/a/b/c/')); // c// 2.获取门路中的目录名称/** * 01 返回的是门路中最初一个局部的上一层目录所在门路 */console.log(path.dirname(__filename)); // D:\Users\小江\Desktop\nodejs_test// 3.获取门路中的拓展名console.log(path.extname(__filename)); // .js// 4.解析门路/** * 01 返回一个对象,蕴含门路的根本信息,相对路径的root为' ' */const obj = path.parse(__filename);console.log(obj);/** * { * root: 'D:\\', * dir: 'D:\\Users\\小江\\Desktop\\nodejs_test', * base: '06-path.js', * ext: '.js', * name: '06-path' * } */// 5.序列化门路 解析门路的反向操作console.log(path.format(obj));// 6.判断以后门路是否为绝对路径console.log(path.isAbsolute(__filename)); // trueconsole.log(path.isAbsolute('/a/b/c')); // true// 7.门路拼接/** * 01 主动确定门路分隔符 * 02 能够判断相对路径(返回上一级,当前目录) */console.log(path.join('/a/b/c', 'd', 'e.html')); // /a/b/c/d/e.html console.log(path.join('/a/b/c', '../', 'e.html')); // /a/b/e.html console.log(path.join(''))// 8.规范化门路/** * 规范化门路,去除门路中的多余的门路分隔符,批改成该平台下的门路分隔符 */console.log(path.normalize('/a\\b/c///d/e.html')); // /a/b/d/e.htmlconsole.log(path.normalize('')) // .// 9.返回绝对路径console.log(path.resolve('./')); console.log(path.resolve('data.ts'));
4.buffer
buffer简介:
01 毋庸require的一个全局变量 02 Nodejs平台下的二进制数据操作 03 不占据v8堆内存大小的内存空间 04 内存的应用由node来管制,由v8的GC回收 05 个别配合Stream流应用,充当数据缓冲区
创立Buffer:
// 1. alloc const bu1 = Buffer.alloc(10) // allocate 调配// 2. allocUnsafeconst bu2 = Buffer.allocUnsafe(10) // allocateUnsafeUnsafe 随机调配的内存,未被清理的内存,有初始值console.log(bu1) // <Buffer 00 00 00 00 00 00 00 00 00 00>console.log(bu2) // <Buffer 98 bf fc 2c c8 01 00 00 04 00> // 3. from// from 创立一个Buffer对象,能够传入一个数组或者字符串或Buffer对象// from 创立的Buffer对象的大小与传入的参数所占空间无关const bu3 = Buffer.from([1,2,'中'],'utf-8') // 数组中的汉字,默认不能辨认console.log(bu3) // <Buffer 01 02 03>console.log(Buffer.from('hello world','utf-8')) // <Buffer 68 65 6c 6c 6f 20 77 6f 72 6c 64>const bu10 = Buffer.from('中');console.log(bu10); //<Buffer e4 b8 ad>console.log(Buffer.from([0xe4,0xb8,0xad])) // <Buffer e4 b8 ad> 这样能力将汉字存入Buffer对象中const tempBu = Buffer.alloc(3); const tempBu4 = Buffer.from(tempBu); // 并不会共享空间tempBu[0] = 1;console.log(tempBu,tempBu4);
Buffer实例办法
let buf = Buffer.alloc(6);// fill 应用指定的值填充缓冲区,填充到指定的范畴,顾头不顾尾buf.fill('12345467589',1,5);// buf.fill(123) // {// wite 从缓冲区写入数据,写道指定的地位,长度buf.write('123',2,4);// toString 从缓冲区读取数据,读取指定的范畴,顾头不顾尾buf = Buffer.from('江江学习');console.log(buf.toString('utf-8',3,9));// slice 截取缓冲区的一部分,返回一个新的缓冲区,顾头不顾尾,可写正数buf = Buffer.from('江江学习');let buf2 = buf.slice(3,9); // 留神汉字占3个字节// indexOf 查找指定的字符串,返回第一个匹配的索引,没有返回-1buf = Buffer.from('江江学习');buf2 = Buffer.from('学习');// console.log(buf.indexOf(buf2));console.log(buf.indexOf('江',1));// copy 拷贝缓冲区,拷贝到指定的地位,顾头不顾尾buf = Buffer.from('江江学习');buf2 = Buffer.alloc(6);buf.copy(buf2,0,3,9); // 写入的起始地位、源缓冲区的起始地位、源缓冲区的完结地位console.log(buf2.toString());
Buffer的罕用静态方法:
// concat // 拼接buffer,设置缓冲区的长度(可不写)let b1 = Buffer.from('江江学习');let b2 = Buffer.from('打游戏');let b = Buffer.concat([b1,b2],18); //isBuffer 判断是否是缓冲区let b3 = Buffer.alloc(18);console.log(Buffer.isBuffer(b3));// 封装split办法Buffer.prototype.split = function(sep){ let sepLen = Buffer.from(sep).length; let ret = []; let start = 0; let offset = 0; while((offset = this.indexOf(sep,start)) !== -1 ){ ret.push(this.slice(start,offset)); start = offset + sepLen; } ret.push(this.slice(start)); // 将最初一个宰割的后果放入数组中 return ret;}let buftest = Buffer.from('江江c学习c打游戏');let arr = buftest.split('c');