关于node.js:node常用内置模块

4次阅读

共计 5721 个字符,预计需要花费 15 分钟才能阅读完成。

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);         // 快捷获取参数的第一个参数  execArgv
console.log(process.pid);          // 过程 ID    ppid
console.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.js
console.log(path.basename(__filename));             // 06-path.js
console.log(path.basename(__filename, '.js'));      // 06-path
console.log(path.basename(__filename, '.css'));     // 06-path.js
console.log(path.basename('/a/b/c'));               // c
console.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));       // true
console.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.html
console.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. allocUnsafe
const 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  查找指定的字符串,返回第一个匹配的索引,没有返回 -1
buf = 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');

正文完
 0