Node.js 中的基础 Module 模块

发布于 2022-10-20 21:03:55 字数 6211 浏览 163 评论 0

Node 中的 path 模块

path 模块提供了一些工具函数,用于处理文件与目录的路径。可以通过以下方式使用:

 const path = require('path');

path.delimiter

提供指定平台的路径分隔符,Windows 为 /

path.join([...paths])

使用平台特定的分隔符把全部给定的 path 片段连接到一起,并规范化生成的路径

长度为零的 path 片段会被忽略。 如果连接后的路径字符串是一个长度为零的字符串,则返回 .,表示当前工作目录

path.join('/first', 'second', 'three', '..', 'four'); // 返回: '/first/second/four'
path.join('/first', '..'); // 返回: '.'

path.resolve([...paths])

path.resolve() 方法会把一个路径或路径片段的序列解析为一个绝对路径

path.resolve('first') // /Users/name/first
path.resolve('..') // /Users

Node 中的 EventEmitter 模块

EventEmitter 模块是 Node 中一个相当重要的模块,是大多数 Node.js 核心 API 都采用惯用的异步事件驱动架构,基本用法如下所示:

 const EventEmitter = require('events');
 
 const myEmitter = new EventEmitter();
 
 myEmitter.on('event', (name) => {
 	console.log(`${name} trigger an event!`);
 });
 
 myEmitter.emit('event', 'mickey');

eventEmitter.on(event[, ...args])

监听事件的触发

eventEmitter.emit(event[, ...args])

触发事件

eventEmitter.once()

参数和 on 方法一样,区别是 once 方法只监听一次事件的触发

当在 EventEmitter 实例中发生错误的时候,如果没有为 error 事件设置监听器,会导致 node 进程崩溃,因此好的实践都会设置一个 error 的 catch 函数

 myEmitter.on('error', (err) => {
 	console.log('something wrong happened!!!');
 });

eventEmitter.removeListener(eventName, listener)

移除实例中 eventName 事件下的 listener 监听器,node v10.0 之后新增 off 的语法糖

eventEmitter.removeAllListeners([eventName])

移除实例中的所有监听器

eventEmitter.setMaxListeners(n)

设置当前 EventEmitter 实例的最大允许监听器数量

eventEmitter.getMaxListeners()

获取当前EventEmitter实例的最大允许监听器数量

eventEmitter.prependListener(eventName, listener) 添加 listener 函数到名为 eventName 的事件的监听器数组的开头。 不会检查 listener 是否已被添加。 多次调用并传入相同的 eventName 和 listener 会导致 listener 被添加与调用多次。

eventEmitter.prependOnceListener(eventName, listener)

添加一个单次 listener 函数到名为 eventName 的事件的监听器数组的开头。 下次触发 eventName 事件时,监听器会被移除,然后调用

Node 中的 os 模块

os.cpus()

返回一个对象数组,包含每个逻辑 CPU 内核的信息,一个非常典型的应用就是开多进程的时候

Node 中的 fs 模块

node.js 当中的 fs 模块主要对应着系统的文件操作

fs.stat(path, callback)

该方法用于检查文件的状态,可以借此来判断某个文件是否存在。path 参数传入该文件的绝对物理路径,该 callback 回调参数有两个参数 err 和 stats。其中 err 为错误信息参数,stats 为一个文件状态对象,如果文件不存在,stats 数值为 undefined

const path = require('path');
const fs = require('fs');
const fsPath = path.resolve('./1.txt');

fs.stat(fsPath, (err, stats) => {
    if (err) throw err;
    console.log(stats);
});

fs.writeFile(path, data[, options], callback)

该方法可用于往指定文件当中写入内容,该内容会覆盖文件当中原有的内容。若传入的文件路径当中的文件不存在,则先完成该文件的穿件,再往里面写入指定内容。path 参数为该文件的绝对物理路径,data 为需要写入该文件当中的数据内容,其中 options 参数可选,可以传入编码格式,若不传则默认为 utf-8callback 回调参数当中只有一个错误信息参数 err,一般在写入失败时触发调用

const fsPath = path.resolve('./1.txt');

fs.writeFile(fsPath, 'mickey0524', (err) => {
    if (err) throw err;
    console.log('写入成功');
});

fs.appendFile(path, data[, options], callback)

writeFile 会覆盖文件,appendFile 是追加文件

fs.unlink(path, callback)

该方法可用于完成指定文件的删除。path 参数为该文件的绝对物理路径,callback 回调参数当中只有一个错误信息参数err,一般在该文件不存在或者删除文件失败时触发调用

fs.unlink(fsPath, (err) => {
    if (err) throw err;
    console.log('删除成功');
});

fs.readFile(path[, options], callback)

该方法用于读取指定文件当中的内容,path 参数为该文件的绝对物理路径,其中 options 参数可选,可以传入编码格式,如读取文本文件时,可传入 utf8,若不指定编码格式,则默认输出读取的文件内容为Buffer形式,故一般都会传入该参数。callback 回调参数当中有两个参数 err 和 data,其中 err 为错误信息参数,一般在在文件不存在或者读取文件失败时触发调用,data 为文件内容

fs.readFile(fsPath, (err, data) => {
	if (err) throw err;
	console.log(data);
});

fs.rename(oldPath, newPath, callback)

该方法可用于移动或重命名指定文件。oldPath 参数为该文件原来的路径,newPath 参数为该文件移动或重命名之后的路径,这两个参数都必须能传入文件完整的绝对物理路径。callback 回调参数当中只有一个错误信息参数,一般在 oldPath 当中指定的文件不存在或者该操作失败时触发调用

 fs.rename(oldPath, newPath, (err) => {
 	if (err) throw err;
 	console.log('rename操作成功');
 });

fs.readdir(path, callback)

该方法可以用于读取一个指定目录当中的信息。其中path为该目录的绝对物理路径,callback回调函数当中有两个参数errfileserr为错误信息参数,一般在该目录不存在或读取失败时触发调用,files为一个数组对象,包含该目录下的所有文件夹与文件的名字。(仅为文件夹的名字和文件名,不是路径形式)

 fs.readdir(dirPath, (err, files) => {
 	if (err) throw err;
 	console.log(files);
 });

fs 的操作默认是异步的,可以在 api 后加上 Sync 来使得操作变成同步,同步操作需要使用 try catch 来捕获可能发生的错误

fs 中的流式操作

fs.createReadStream(path[, options])

const fs = require('fs');

const rs = fs.createReadStream('sample.txt', 'utf-8');

rs.on('data', function (chunk) {
    console.log('DATA:')
    console.log(chunk);
});

rs.on('end', function () {
    console.log('END');
});

rs.on('error', function (err) {
    console.log('ERROR: ' + err);
});

fs.createWriteStream(path[, options])

var fs = require('fs');

var ws1 = fs.createWriteStream('output1.txt', 'utf-8');
ws1.write('使用Stream写入文本数据...\n');
ws1.write('END.');
ws1.end();

var ws2 = fs.createWriteStream('output2.txt');
ws2.write(new Buffer('使用Stream写入二进制数据...\n', 'utf-8'));
ws2.write(new Buffer('END.', 'utf-8'));
ws2.end();

pipe

就像可以把两个水管串成一个更长的水管一样,两个流也可以串起来。一个 Readable 流和一个 Writable 流串起来后,所有的数据自动从 Readable 流进入 Writable流,这种操作叫 pipe

Node.js 中,Readable 流有一个 pipe() 方法,就是用来干这件事的

var fs = require('fs');

var rs = fs.createReadStream('sample.txt');
var ws = fs.createWriteStream('copied.txt');

rs.pipe(ws);

默认情况下,当 Readable 流的数据读取完毕,end 事件被触发后,将自动关闭 Writable 流。如果我们不希望自动关闭 Writable 流,需要转入参数

readable.pipe(writable, { end: false });

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

薄暮涼年

暂无简介

文章
评论
26 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文