一、内置模块fs
Node.js 的文件系统模块(fs)提供了用于处理文件和目录的功能。它允许你读取、写入、复制、移动、删除文件,以及创建、删除目录等操作。fs 模块提供了同步和异步的方法,可以根据需求选择适合的方式进行文件系统操作
1、操作文件
const fs = require('fs')
// 1. 异步读取文件
fs.readFile('file.txt', 'utf8', (err, data) => {
if (err) throw err
console.log(data)
})
// 2、同步读取文件
const data = fs.readFileSync('file.txt', 'utf8')
console.log(data)
// 3. 异步写入文件
fs.writeFile('file.txt', 'Hello, world!', 'utf8', (err) => {
if (err) throw err
console.log('File has been written.')
})
// 2、同步写入文件
fs.writeFileSync('file.txt', 'Hello, world!', 'utf8')
console.log('File has been written.')
// 3. 复制文件
fs.copyFile('source.txt', 'destination.txt', (err) => {
if (err) throw err
console.log('File has been copied.')
})
// 4. 删除文件
fs.unlink('file.txt', (err) => {
if (err) throw err
console.log('File has been deleted.')
})
2、操作文件夹
const fs = require('fs')
// 5. 创建文件夹
fs.mkdir('directory', (err) => {
if (err) throw err
console.log('Directory has been created.')
})
// 6. 读取文件夹
fs.readdir('directory', (err, files) => {
if (err) throw err
console.log(files)
})
// 7. 删除文件夹
fs.rmdir('directory', (err) => {
if (err) throw err
console.log('Directory has been deleted.')
})
二、内置模块path
1、路径的拼接和解析
拼接路径:这段代码使用 path.join() 方法将多个路径片段拼接成一个完整的路径。__dirname 表示当前模块的目录路径
const path = require('path')
const fullPath = path.join(__dirname, 'dir', 'file.txt')
console.log(fullPath)
解析路径:path.parse() 方法用于解析路径,并返回一个包含路径各部分的对象。该对象具有以下属性:root、dir、base、name 和 ext
const path = require('path')
const parsedPath = path.parse('/path/to/file.txt')
console.log(parsedPath)
解析为绝对路径:path.resolve,使用path.resolve可返回一个绝对路径
const path = require('path')
const absolutePath = path.resolve(__dirname, ./dist)
console.log(absolutePath)
2、获取路径信息
const path = require('path')
// 1. 获取文件名
const filename = path.basename('/path/to/file.txt')
console.log(filename)
// 2. 获取文件扩展名
const ext = path.extname('/path/to/file.txt')
console.log(ext)
// 3、获取父文件夹路径
const filePath = '/path/to/file.txt'
const parentDir = path.dirname(filePath)
console.log(parentDir)
// 4. 判断路径是否绝对路径
const isAbsolute = path.isAbsolute('/path/to/file.txt')
console.log(isAbsolute)
3、路径格式化
const path = require('path')
const formattedPath = path.format({
root: '/',
dir: '/path/to',
base: 'file.txt',
ext: '.txt',
name: 'file'
})
console.log(formattedPath)
三、内置模块http
Node.js 的内置模块 http 提供了创建 HTTP 服务器和客户端的功能。它允许你构建基于 HTTP 协议的网络应用程序,可以处理 HTTP 请求和响应,提供 Web 服务器功能
1、创建http服务器
这段代码创建了一个简单的 HTTP 服务器,并在本地的 3000 端口上监听请求,你可以通过请求的方法 (req.method) 和 URL (req.url) 来根据不同的路由或条件来处理请求。在这个示例中,当收到 GET 请求并且 URL 是根路径时,服务器返回一个简单的 "Hello, World!" 响应,否则返回一个 "Not Found" 响应
const http = require('http')
// 创建 HTTP 服务器
const server = http.createServer((req, res) => {
if (req.method === 'GET' && req.url === '/') {
res.statusCode = 200
res.setHeader('Content-Type', 'text/plain')
res.end('Hello, World!')
} else {
res.statusCode = 404
res.setHeader('Content-Type', 'text/plain')
res.end('Not Found')
}
})
// 监听服务器端口
server.listen(3000, 'localhost', () => {
console.log('Server is running on http://localhost:3000/')
})
2、发起 HTTP 请求
这段代码创建了一个 HTTP 请求,并发送给指定的主机和端口。当收到响应时,可以获取响应的状态码 (res.statusCode) 和响应的数据
const http = require('http')
// 请求配置信息
const options = {
hostname: 'http://127.0.0.1',
port: 3000,
path: '/',
method: 'GET'
}
// 发起请求
const req = http.request(options, (res) => {
console.log(`Status Code: ${res.statusCode}`)
res.on('data', (data) => {
console.log(data.toString())
})
})
req.end()
四、内置模块events
Node.js 的内置模块 events 提供了一个基于发布-订阅模式的事件触发和处理的功能。它允许你在应用程序中创建、触发和处理事件,以实现模块间的解耦和通信。events 模块是 Node.js 事件驱动架构的核心组件,它是其他许多内置模块和第三方模块的基础。
1、events基本使用
const EventEmitter = require('events')
// 创建事件发射器
// 创建一个事件发射器实例 emitter,它可以用来触发和处理事件
const emitter = new EventEmitter()
// 注册事件处理程序
// 使用 on 方法注册事件处理程序,当事件触发时,注册的处理程序将被执行
// 可以为事件处理程序传递参数
emitter.on('eventName', (arg1, arg2) => {
console.log('Event triggered with arguments:', arg1, arg2)
})
// 一次性事件处理程序
// 使用 once 方法注册一次性事件处理程序
// 一次性事件处理程序只会在事件触发一次后执行一次,之后将自动移除
emitter.once('eventName', () => {
console.log('Event handler will only be called once')
})
// 移除事件处理程序
// 使用 off 方法移除指定事件的事件处理程序
emitter.off('eventName', eventHandler)
// 触发事件
// 使用 emit 方法触发指定的事件。可以传递任意数量的参数给事件处理程序
emitter.emit('eventName', 'argument1', 'argument2')
// 处理错误事件
// 当没有为错误事件提供处理程序时,错误事件会触发默认的行为(抛出异常)。
// 可以使用 on 方法注册错误事件处理程序,以捕获并处理错误
emitter.on('error', (error) => {
console.error('An error occurred:', error)
})
2、EventEmitter类的基本属性
EventEmitter 类在 Node.js 的 events 模块中定义,并提供了一些基本属性来支持事件的管理和触发
EventEmitter.defaultMaxListeners:类型:number,默认值:10
defaultMaxListeners 属性是 EventEmitter 类的静态属性,用于设置每个事件默认的最大监听器数量。当没有手动设置事件的最大监听器数量时,将使用该默认值。如果超过最大监听器数量,EventEmitter 会发出警告。你可以通过设置 EventEmitter.defaultMaxListeners 来修改默认值。
const EventEmitter = require('events')
EventEmitter.defaultMaxListeners = 20
3、实例emitter的基本属性(emitter = new EventEmitter())
emitter.on(event, listener):用于注册事件处理程序。
emitter.emit(event, [arg1], [arg2], [...]):用于触发指定的事件,并传递可选参数给事件处理程序。
emitter.once(event, listener):用于注册一次性事件处理程序,它只会在事件触发一次后执行一次,之后将自动移除。
emitter.off(event, listener):用于移除指定事件的事件处理程序。
emitter.addListener(event, listener):on 方法的别名,用于注册事件处理程序。
emitter.removeListener(event, listener):off 方法的别名,用于移除指定事件的事件处理程序。
emitter.removeAllListeners([event]):用于移除所有事件的所有事件处理程序,或者只移除指定事件的事件处理程序。
emitter.setMaxListeners(n):用于设置指定 EventEmitter 实例的最大监听器数量和直接设置EventEmitter.defaultMaxListeners作用等价。
emitter.getMaxListeners():用于获取指定 EventEmitter 实例的最大监听器数量。
emitter.listenerCount(event):用于获取指定事件的监听器数量。
emitter.eventNames():用于返回当前 EventEmitter 实例上已注册的所有事件名的数组。
五、内置模块OS
Node.js 的内置模块 os 提供了与操作系统相关的功能,它允许你访问和操作操作系统的信息。os 模块提供了许多方法和属性,用于获取操作系统的各种信息,例如系统架构、主机名、CPU 使用情况等
const os = require('os')
// 获取操作系统平台
console.log(os.platform())
// 获取操作系统架构
console.log(os.arch())
// 获取主机名
console.log(os.hostname())
// 获取 CPU 信息
console.log(os.cpus())
// 获取内存信息
console.log(os.totalmem())
console.log(os.freemem())
// 获取网络接口信息
console.log(os.networkInterfaces())
六、内置模块DNS
Node.js 内置的 dns 模块提供了对域名系统 (DNS) 的访问和解析功能。它允许你进行 DNS 查询,例如将域名解析为 IP 地址或查找域名的 MX 记录等。dns 模块使用了底层操作系统提供的 DNS 解析功能(注:MX 记录(Mail Exchange Record)是在域名系统 (DNS) 中用于指定邮件服务器的记录类型。它用于定义接收特定域名的电子邮件的邮件服务器)
const dns = require('dns');
// 解析域名为 IP 地址
dns.lookup('www.example.com', (err, address, family) => {
if (err) throw err
console.log('IP 地址:', address)
})
// 解析 IP 地址为域名
dns.reverse('127.0.0.1', (err, hostnames) => {
if (err) throw err
console.log('域名:', hostnames)
})
// 查找域名的 MX 记录
dns.resolveMx('example.com', (err, records) => {
if (err) throw err
console.log('MX 记录:', records)
})
// 查找域名的所有记录
dns.resolve('example.com', (err, records) => {
if (err) throw err
console.log('所有记录:', records)
})