内置模块

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)open in new window

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)open in new window

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

Node.js 文件系统模块 (nodejs.cn)open in new window

文件属性

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)open in new window

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 }
Last Updated 2024/3/14 09:51:53