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');