node常用内置模块
官网的模块都是 系统模块
参考:https://juejin.cn/post/7080871139068608543
一、path 模块 https://nodejs.org/dist/latest-v16.x/docs/api/path.html
path 模块提供了用于处理文件和目录的路径的实用工具。 可以使用以下方式访问它:
const path = require('path');
- path.basename(path):返回
path
的最后一部分path.basename('/foo/bar/baz/asdf/quux.html'); // 返回: 'quux.html'
- path.dirname(path):返回 path 的目录名
path.dirname('/foo/bar/baz/asdf/quux'); // 返回: '/foo/bar/baz/asdf'
- path.extname(path):返回
path
的扩展名。 如果path
的最后一部分中没有.
,则返回空字符串。path.extname('index.html'); // 返回: '.html' path.extname('index.coffee.md'); // 返回: '.md' path.extname('index.'); // 返回: '.' path.extname('index'); // 返回: '' path.extname('.index'); // 返回: '' path.extname('.index.md'); // 返回: '.md'
- path.join([...paths]): 【推荐使用这个】使用特定于平台的分隔符作为定界符将所有给定的 path 片段连接在一起,然后规范化生成的路径。
path.join('/foo', 'bar', 'baz/asdf', 'quux', '..'); // 返回: '/foo/bar/baz/asdf' path.join('foo', {}, 'bar'); // 如果任何路径片段不是字符串,则抛出 TypeError。 // 抛出 'TypeError: Path must be a string. Received {}'
- path.parse(path): 返回一个对象,其属性表示 path 的重要元素。
path.parse('/home/user/dir/file.txt'); // 返回: // { root: '/', // dir: '/home/user/dir', // base: 'file.txt', // ext: '.txt', // name: 'file' }
- path.resolve([...paths]): 将路径或路径片段的序列解析为绝对路径。
注意:resolve 只要碰到 / 根路径,就会抛弃前面的 路径。
// 给定的路径序列从右到左处理,每个后续的 path 会被追加到前面,直到构建绝对路径。构建好绝对路径后,前面的片段就是废弃的。 path.resolve('/foo/bar', './baz'); // 返回: '/foo/bar/baz' path.resolve('/foo/bar', '/tmp/file/'); // 返回: '/tmp/file' path.resolve('wwwroot', 'static_files/png/', '../gif/image.gif'); // 如果当前工作目录是 /home/myself/node, // 则返回 '/home/myself/node/wwwroot/static_files/gif/image.gif'
注意:有两个特殊的全局变量,__filename、__dirname。执行脚本文件时,node进程就会传入这俩变量值。
总结:resolve 只要碰到 / 根路径,就会抛弃前面的 路径;join 只是路径的连接,碰到 .. 或 ../ 才会进行路径的移动。【个人,推荐使用join】
二、fs 模块 https://nodejs.org/dist/latest-v16.x/docs/api/fs.html
// 模块引入 const fs = require('fs')
node文件系统的API大都提供三种操作方式:
- 同步操作文件:代码会被阻塞,不会继续执行
- 异步回调函数操作文件:代码不会被阻塞,需要传入回调函数,当获取到结果时,回调函数执行
- 异步Promise操作文件:代码不会被阻塞,通过fs.promises调用方法操作,会返回一个Promise,可以通过then、catch进行处理。
【说明:fs模块和上面的path模块 API 的分类不同,fs 同一类API大都有三种操作方式。下面就按功能来区分api】
-
读取文件状态(信息)
- fs.statSync:同步操作
const filepath = './abc.txt' const info = fs.statSync(filepath) console.log(info);
- fs.stat:异步操作
fs.stat(filepath, (err, info) => { if(err) { console.log(err); return } console.log(info); console.log(info.isFile()); // 判断是否是一个文件 console.log(info.isDirectory()); // 判断是否是一个文件夹 }) console.log('后续需要执行的代码');
- fs.promises.stat: 异步Promis操作
fs.promises.stat(filepath).then(info => { console.log(info); }).catch(err => { console.log(err); }) console.log('后续需要执行的代码');
- fs.statSync:同步操作
-
文件描述符
- fs.openSync:同步操作
- fs.open:异步操作
fs.open('./abc.txt', (err, fd) => { if(err) { console.log(err); return } // 通过文件描述符去获取文件信息 fs.stat(fd, (err, info) => { console.log(info); }) })
- fs.promises.open
-
文件的读取
- fs.readFileSync:同步操作
import { readFileSync, writeFileSync } from 'fs' const file = readFileSync('./www.log', 'utf-8') console.log(file); // 文件内容
- fs.readFileSync:同步操作
-
文件的写入
- fs.writeFileSync:覆盖原来的内容
import { writeFileSync } from 'fs' writeFileSync('./www.log', "我是中国人")
- appendFileSync:追加内容写到文件中
import { appendFileSync } from 'fs'; appendFileSync('./www.log', "我是中国人\r\n") // \r\n 换行处理 appendFileSync('./www.log', `${new Date().toLocaleString('zh-CN', {hour12: false})} -- 我是中国人\r\n`) // \r\n 换行处理
- fs.writeFileSync:覆盖原来的内容
-
创建文件夹
- fs.mkdirSync
- fs.mkdir
const fs = require('fs') // 创建文件夹 const dirname = './haha' if(!fs.existsSync(dirname)) { fs.mkdir(dirname, (err) => { console.log(err); }) }
-
获取文件夹的内容
- fs.readdir:获取文件夹中的所有文件(只是文件名)。
-
重命名
三、Util 模块 https://nodejs.org/dist/latest-v16.x/docs/api/util.html
- isDate:判断是否是日期格式的变量
- isAnyArrayBuffer:判断是否是buffer
- isAsyncFunction:判断函数是否是异步的
- format:格式化字符串
- inspect: 将对象转为字符串
四、http 模块 https://nodejs.org/dist/latest-v16.x/docs/api/util.html