内置模块
yuhuo2022-08-18JavaScriptNodeJs
readline
命令行交互
const readline = require("readline").createInterface({
input: process.stdin,
output: process.stdout,
});
readline.question(`你叫什么名字?`, (name) => {
console.log(`你好 ${name}!`);
readline.close();
});
events
自定义事件监听和触发 Node.js 事件模块 (nodejs.cn)
const Events = require("events");
const events = new Events();
var handle = (params) => {
console.log(params);
}
// 添加事件监听器
events.on("start", handle);
events.addListener("fly", handle);
// 添加单次事件监听器
events.once("start", handle);
// 移除事件监听器
events.off("fly", handle);
events.removeListener("fly", handle);
// 移除指定事件的所有监听器
events.removeAllListeners("fly");
// 移除所有事件的所有监听器
events.removeAllListeners();
// 触发事件
events.emit("start", 1, 100);
http
搭建HTTP服务器 Node.js http 模块 (nodejs.cn)
const http = require("http");
const hostname = "127.0.0.1";
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader("Content-Type", "text/plain");
res.end("Hello World\n");
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
https
发送 get 请求
const https = require("https");
const options = {
hostname: "nodejs.cn",
port: 443,
path: "/todos",
method: "GET",
};
const req = https.request(options, (res) => {
console.log(`状态码: ${res.statusCode}`);
res.on("data", (d) => {
process.stdout.write(d);
});
});
req.on("error", (error) => {
console.error(error);
});
req.end();
发送 post 请求
const https = require("https");
const data = JSON.stringify({
todo: "做点事情",
});
const options = {
hostname: "nodejs.cn",
port: 443,
path: "/todos",
method: "POST",
headers: {
"Content-Type": "application/json",
"Content-Length": data.length,
},
};
const req = https.request(options, (res) => {
console.log(`状态码: ${res.statusCode}`);
res.on("data", (d) => {
process.stdout.write(d);
});
});
req.on("error", (error) => {
console.error(error);
});
req.write(data);
req.end();
fs
文件属性
const fs = require("fs");
// 异步
fs.stat("./a.txt", (err, stats) => {
if (err) {
console.error(err);
return;
}
// 判断是否文件
stats.isFile();
// 判断是否目录
stats.isDirectory();
// 判断是否符号链接
stats.isSymbolicLink();
// 文件的大小(单位:字节)
stats.size;
});
// 同步(阻塞线程,直到文件属性准备就绪为止)
// 需要 try...catch 捕捉异常
try {
const stats = fs.statSync("./a.txt");
stats.isFile();
stats.isDirectory();
stats.isSymbolicLink();
stats.size;
} catch (err) {
console.error(err);
}
读取文件
const fs = require("fs");
// 异步
fs.readFile("./a.txt", "utf8", (err, data) => {});
// 同步
const data = fs.readFileSync("./a.txt", "utf8");
注意
返回数据之前将文件的全部内容读取到内存中,这意味着大文件会对内存的消耗和程序执行的速度产生重大的影响,更好的选择是使用流来读取文件的内容。
写入文件
const fs = require("fs");
const content = "一些内容";
// 异步
fs.writeFile("./a.txt", content, (err) => {});
// 同步
fs.writeFileSync("./a.txt", content);
// 指定标志
// r+ 打开文件用于读写。
// w+ 打开文件用于读写,将流定位到文件的开头。如果文件不存在则创建文件。
// a 打开文件用于写入,将流定位到文件的末尾。如果文件不存在则创建文件。
// a+ 打开文件用于读写,将流定位到文件的末尾。如果文件不存在则创建文件
fs.writeFile('/Users/joe/test.txt', content, { flag: 'a+' }, err => {})
追加文件的便捷方式
const fs = require("fs");
const content = "一些内容";
// 异步
fs.appendFile("./a.txt", content, (err) => {});
// 同步
fs.appendFileSync("./a.txt", content);
删除文件
const fs = require("fs");
const content = "一些内容";
// 异步
fs.unlink("./a.txt", (err) => {});
// 同步
fs.unlinkSync("./a.txt");
// 异步
fs.rm("./a.txt", (err) => {});
// 同步
fs.rmSync("./a.txt");
文件夹
检查文件夹是否存在
const fs = require("fs");
// 同步
var isExist = fs.existsSync("./abc");
创建新的文件夹
const fs = require("fs");
// 异步
fs.mkdir("./abc", (err) => {});
// 同步
fs.mkdirSync("./abd");
读取文件夹的内容(文件名和子文件夹名)
const fs = require("fs");
// 异步
fs.readdir("./abc", (err,list)=>{});
// 同步
var list = fs.readdirSync("./abc");
// [ '文件夹', '文件.txt' ]
判断是否是文件
var isFile = fs.lstatSync("./abc/1").isFile();
重命名文件夹
const fs = require("fs");
// 异步
fs.rename("./1", "./abc/2", (err) => {});
// 同步
fs.renameSync("./abc/2", "./1");
删除文件夹(只能是空文件夹)
const fs = require("fs");
// 异步
fs.rmdir("./abc", (err) => {});
// 同步
fs.rmdirSync("./abc");
path
路径计算(只是计算,不会检查是否真实存在)
const path = require("path");
const notes = "/users/joe/notes.txt";
// 路径段分隔符:Windows 是 \,Linux/macOS 是 /
path.sep;
// 路径定界符:Windows 是 ;,Linux/macOS 是 :
path.delimiter;
// 获取父文件夹:/users/joe
path.dirname(notes);
// 获取文件名:notes.txt
path.basename(notes);
// 获取文件扩展名:.txt
path.extname(notes);
// 获取不带扩展名的文件名:notes
path.basename(notes, path.extname(notes));
// 连接路径:\users\joe\notes.txt
path.join("/", "users/", "/joe", "notes.txt");
// 解析为绝对路径
// 相对当前工作路径 D:\Workspace\Web_yuhuo\Practice\joe.txt
path.resolve("joe.txt");
// 相对当前工作路径和指定路径 D:\Workspace\Web_yuhuo\Practice\tmp\joe.txt
path.resolve("tmp", "joe.txt");
// 相对根路径:D:\tmp\joe.txt
path.resolve("/tmp", "joe.txt"); // .txt
// 规范化路径:\users\test.txt
path.normalize("/users/joe/..//test.txt");
// 判断是否是绝对路径
path.isAbsolute('/test/something');
// 解析路径
path.parse('/users/test.txt');
// {
// root: '/', // 根路径
// dir: '/users', // 从根路径开始的文件夹路径
// base: 'test.txt', // 文件名 + 扩展名
// ext: '.txt', // 文件名
// name: 'test' // 文件扩展名
// }
// 返回从第一个路径到第二个路径的相对路径:'something/test.txt'
path.relative('/Users/joe', '/Users/joe/something/test.txt');
os
操作系统信息 Node.js 操作系统模块 (nodejs.cn)
const os = require('os');
// 返回标识底层架构的字符串,例如 arm、x64、arm64
os.arch();
// 返回关于系统上可用的 CPU 的信息
os.cpus();
// [
// ({
// model: "Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz",
// speed: 2712,
// times: { user: 4942218, nice: 0, sys: 6685593, idle: 42539015, irq: 920937 },
// },
// {
// model: "Intel(R) Core(TM) i5-7200U CPU @ 2.50GHz",
// speed: 2712,
// times: { user: 5209546, nice: 0, sys: 4158609, idle: 44798296, irq: 41250 },
// }),
// ];
// 返回根据是使用大端序或小端序编译 Node.js,返回 BE 或 LE
os.endianness();
// 返回代表系统中可用内存的字节数:9009500160
os.freemem();
// 返回当前用户的主目录的路径:C:\Users\huoyu
os.homedir();
// 返回主机名:huoyugz1
os.hostname();
// 返回系统上可用的网络接口的详细信息
os.networkInterfaces();
// {
// "WLAN 2": [
// {
// address: "fe80::f1f5:c2af:8656:4fe1",
// netmask: "ffff:ffff:ffff:ffff::",
// family: "IPv6",
// mac: "1c:4d:70:2f:ac:a6",
// scopeid: 5,
// internal: false,
// cidr: "fe80::f1f5:c2af:8656:4fe1/64",
// },
// ],
// };
// 返回为 Node.js 编译的平台:darwin,freebsd,linux,openbsd,win32
os.platform();
// 返回标识操作系统版本号的字符串:10.0.19044
os.release();
// 返回指定的临时文件夹的路径:C:\Users\huoyu\AppData\Local\Temp
os.tmpdir();
// 返回表示系统中可用的总内存的字节数:17038065664
os.totalmem();
// 标识操作系统:Linux,Darwin(macOS),Windows_NT
os.type();
// 返回自上次重新启动以来计算机持续运行的秒数:107210
os.uptime();
// 返回包含当前用户信息
os.userInfo();
// { uid: -1, gid: -1, username: "huoyu", homedir: "C:\\Users\\huoyu", shell: null }