内置模块
https/http
fs
path
readline
net
zlib
crypto
events
url
第三方模块
express 、body-parse、art-template
cross-env
http-proxy-middleware
ws
jsonwebtoken
对称加密
非对称加密
在线分析网站
exceljs
html2canvas
示例
文档的安装和使用
log4js
querystring
mime
cherrio
gulp
axios
命令行模块
npm、yarn
nvm、nrm、npx
nodemon
http-server
内置模块
可直接引入使用。可以在下面的链接中查看。
Index | Node.js v16.15.1 Documentation
Index | Node.js v18.4.0 Documentation
https/http
//get请求数据 const https = require('https') http.get(url, res => { let str = '' res.on('data',chunk => { str = chunk }//接收监控数据 res.on('end',chunk => { console.log(str) }//数据传输结束 }) ///创建监听服务器8080端口 const server = https.createServer((request, respones) => { let url = request.url//匹配localhost:8080之后的字符串 response.writeHead(200, { 'content-type':'text/plain' }//第一个参数是返回状态码,content-type默认为text/html时下面write时是翻译成html节点;当返回json时应为'application/json;charset=utf-8'. response.write(`<a>${url}</a>`)//text/plain,因此,它不会被翻译成字符串html。 response.end() }) server.listen(8080,'localhost', () => { console.log(监视8080端口) })
fs
用于文件读写等操作。
const fs = require('fs') fs.mkdir('logs',(err)=>{//创建logs的文件夹 if(err){ throw err } }) fs.rename('./logs','./log',()=>{}//将logs文件夹名称修改为log fs.rmdir('./log',()=>{}//删除log文件夹 fs.readdir('./logs',(err, result)=>{}//阅读文件夹logs,内容存放在result中 fs.writeFile('./logs/log1.log','hello\nworld',err=>{console.log(err)})并将创建文件hello等写入文件 fs.appendFile('./logs/log1.log','!!!!',err=>{console.log(err)})//在文件log1.log添加原内容!!! fs.unlink('./logs/log1.log',err=>{console.log(err)})//删除log1.log文件 fs.readFile('./logs/log1.log','utf-8',(err,content)=>{//查看log1.log文件内容 console.log(content)///未添加第二个参数utf-8’时,content需要使用数据流content.toString()转换为字符串。 }) fs.stat('./logs',(err,stats)=>{//阅读文件 stats.isDirectory()///判断文件是否为文件夹 }) fs.watch('./logs/log1.log',(err)=>{console.log(文件已更改)}//文件名称、文件内容修改和文件删除会触发第二个参数的函数 fs.existsSync(filePathName)///判断文件或文件名是否存在于绝对路径下,返回布尔值。 const contentBuffer = fs.readFileSync('./logs/log1.log/同步读取文件 const fsPromises = require('fs').promises///方法包装为promise的形式 const content = await fsPromises.readFile('./logs/log1.log','utf-8')
path
用于分析路径。
const path = require('path') let absolutePath = path.join(__dirname,'../index.html回到上一层index.html的绝对路径 console.log(path.parse(absolutePath))//对象:dir绝对路径;base为文件名添加扩展名;ext为扩展名;name文件名称coe>
readline
用于控制台中用户输入等交互。
const readline = require('readline')
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
rl.question('What do you think of Node.js? ', (answer) => {
console.log(`Thank you for your valuable feedback: ${answer}`)
rl.close()
})//控制台中输出What do you think of Node.js?后会等待用户输入,输入后的内容为第二个回调函数answer的参数
net
webSocket编程模块。
//服务端代码
const net = require('net')
const server = new net.createServer()
let clients = {}
let clientName = 0
server.on('connection', (client) => {//客户端连接触发事件
client.name = ++clientName//根据连接的先后顺序以数字命名每个客户端名字
clients[client.name] = client//哈希存储每个客户端
client.on('data', (msg) => {//接受客户端数据事件。
console.log('客户端传来:' + msg);
broadcast(client, msg.toString())
})
client.on('error', (e) => {//与客户端连接发生错误
console.log('client error' + e);
client.end()
})
client.on('close', (data) => {//与客户端断开连接
delete clients[client.name]
console.log(client.name + ' 下线了');
})
})
function broadcast(client, msg) {
console.log('msg',msg)
for (var key in clients) {
console.log('number',key)
clients[key].write(client.name + ' 说:' + msg)//向每个客户端写入事件
}
}
server.listen(9000, 'localhost')//开启监听服务端9000端口
//客户端代码
const net = require('net')
const readline = require('readline')
const port = 9000
const host = '127.0.0.1'//ip地址
const socket = new net.Socket()
socket.setEncoding = 'UTF-8'
socket.on('data', (msg) => {//监听收到服务端数据事件
console.log(msg.toString())
say()
})
socket.connect(port, host, () => {//连接服务端
socket.write('hello.')
})
socket.on('error', function (err) {//连接错误事件
console.log('error' + err);
})
socket.on('close', function () {//连接断开事件
console.log('connection closeed');
})
const r1 = readline.createInterface({//用于输入内容
input: process.stdin,
output: process.stdout
})
function say() {//用于输入内容
r1.question('请输入:\n', (inputMsg) => {
if (inputMsg != 'bye') {
socket.write(inputMsg + '\n')//向服务端发送数据
} else {
socket.destroy()//销毁客户端实例(断开连接)
r1.close()
}
})
}
zlib
可用于压缩文件等
const fs = require('fs')
const zlib = require('zlib')
const gzip = zlib.createGzip()
const readStream = fs.createReadStream('./logs.txt')//以数据流的方式读取logs.txt文件
const writeStream = fs.createWriteStream('./logs.gzip')
readStream.pipe(gzip).pipe(writeStream)//一个pipe压缩数据流,第二个将数据流存放在./logs.gzip文件中。整个过程为生成压缩文件。
crypto
用于加密数据。
const crypto = require('crypto')
const secret = 'abcdefg'
const hash = crypto.createHmac('sha256', secret)//第一个参数为加密的算法,sha1为对称加密,sha256为非对称加密
.update('I love you')//加密密钥
.digest('hex')//16进制形式加密
events
const EventEmitter = require("events");
class MyEventEmitter extends EventEmitter {}
const event = new MyEventEmitter();
event.on("log", (value) => {//可以重复触发多次
console.log(value);
});
event.once("logOne", (value) => {//once只能出发一次
console.log(value);
});
event.emit("log", "one");
event.emit("log", "two");
event.emit("logOne", "one");
url
用于解析url。
const url = require('url')
const urlString = 'https://www.baidu.com:443/path/index.html?id=2#tag=3'
console.log(url.parse(urlString))
url.format(url.format(url.parse(urlString))//将url对象解析为字符串
url.resolve('http://www.baidu.com/a','/b')//返回字符串'http://www.baidu.com/b'
const urlParams = new URLSearchParams(url.parse(urlString).search)
urlParams.get('id')//2
打印url.parse结果

第三方模块
需要通过npm下载后引入使用。在下面链接中可以搜索查看使用。
npm
express 、body-parse、art-template
express、body-parse、express-art-template模块基础使用详解(use、route、路径匹配、响应方法、托管静态文件、官网)_YF-SOD的博客-CSDN博客
cross-env
运行跨平台设置和使用环境变量的脚本,用于解决package.json的scripts中使用 NODE_ENV=production来设置环境变量时,大多数 Windows 命令提示将会阻塞(报错)。(异常是Windows上的Bash,它使用本机Bash。)换言之,Windows 不支持 NODE_ENV=production 的设置方式。
先安装npm install --save-dev cross-env然后添加下面内容
{
"scripts": {
"build": "cross-env NODE_ENV=production webpack --config build/webpack.config.js"
}
}
cross-env 可以使用单个命令,而不必担心为平台正确设置或使用环境变量。这个迷你的包(cross-env)能够提供一个设置环境变量的 scripts,让你能够以 Unix 方式设置环境变量,然后在 Windows 上也能兼容运行。
NODE_ENV环境变量将由 cross-env 设置 打印 process.env.NODE_ENV === 'production'
http-proxy-middleware
一个代理中间件模块,用于转发请求,将客户端发送的请求数据转发到目标服务器,再将响应输送到客户端,可用于。
const http = require("http");
const { createProxyMiddleware } = require("http-proxy-middleware");
const server = http.createServer((req, res) => {
const urlStr = req.url;
if (/\/ajax/.test(urlStr)) {
const proxy = createProxyMiddleware("/ajax", {
tartget: "https://lady.vip.com", //将http://localhost:8080替换为https://lady.vip.com
changeOrigin: true,
});
proxy(req, res);
} else if (/\/ap/.test(urlStr)) {
const proxy2 = createProxyMiddleware("/api", {
target: "https://m.lagou.com",
changeOrigin: true,
pathRewrite: {
"^/api": "", //重写路径/api替换为空串即http://localhost:8080/api替换为https://lady.vip.com
},
});
proxy2(req, res);
}
});
server.listen(8080, () => {
console.log("localhost:8080");
});
ws(客户端)
webSocket编程模块。
webSocket(与http请求区别、请求和返回示例、替代方法:ajax轮询、long poll、Flash、NodeJS实现WebSocket通信代码、原理、WebSocket构造函数详解)_YF-SOD的博客-CSDN博客_websocket请求方式
jsonwebtoken
用于数据加密。
对称加密
私钥加密和解密内容。
非对称加密
生成私钥和公钥(根据私钥生成的),私钥生成token,上传token,通过公钥验证token。
在线解析网站
JSON Web Tokens - jwt.io
const jwt = require('jsonwebtoken')
// 对称加密
const tk1 = jwt.sign({username:'pyf'},'key')//对称加密生成token,第二个参数为密钥
jwt.verify(tk,'key')//解密token还原加密数据{ username: 'pyf', iat: 1657617119 }
// 非对称加密,下面privateKey和publicKey需要读取生成的私钥和公钥文件内容。
// 生成私钥privateKey,命令行输入
// openssl
// genrsa -out rsa_private_key.pem 2048
// 根据私钥生成公钥public,命令行继续输入
// rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
// rsa_private_key为私钥文件,rsa_public_key.pem为公钥文件,2048位指定私钥文件大小
const tk2 = jwt.sign({username:'pyf'},privateKey,{algorithm:'RS256'})//第三个参数为加密的方法
jwt.verify(tk2,publicKey)//解密token还原加密数据{ username: 'pyf', iat: 1657617119 }
exceljs
读取、操作电子表格数据和样式并将其写入 XLSX 和 JSON。
从 Excel 电子表格文件作为项目进行逆向工程。
exceljs - npm
html2canvas(客户端)
该脚本遍历它所加载的页面的 DOM。它收集那里所有元素的信息,然后使用这些信息来构建canvas页面的。常用于(通过将页面内容转化为canvas后,再通过canvas对象的toDataURL()方法转换为base64数据进行下载)
注意:无法绕过浏览器设置的内容策略限制,加载位于页面来源之外的图像,您需要使用代理来加载图像。
示例
canvas基本使用(获取画布、绘制矩形、清除屏幕内容、动画、绘制不规则图形、圆形、虚线、绘制文字、颜色渐变、设置阴影、渲染图片、变形偏移、canvas文档)_YF-SOD的博客-CSDN博客_获取canvas画布内容
安装和使用文档
Getting Started | html2canvas
html2canvas - Screenshots with JavaScript
log4js
将打印的日志生成到文件中。
const log4js = require('log4js')
log4js.configure({
appenders: { cheese: {type:'file',filename:'cheese.log'}},//日志输出到文件的文件名
categories: { default: { appenders: ['cheese'], lever: 'error'}}
})
let logger = log4js.getLogger('cheese')
logger.leverl = 'debug'
logger.debug(str)//str为打印到文件中的内容
querystring
用于将url带参数部分的字符串解析为对象和url转译等。
const querystring = require('querystring')
var qs = 'x=3&y=4'
var parsed = querystring.parse(qs)//解析为对象{x:3,y:4}
querystring.stringify(parsed)//解析为字符串qs
querystring.escape('https://www.baidu.com?search=创作')//转译为'https%3A%2F%2Fwww.baidu.com%3Fsearch%3D%E5%88%9B%E4%BD%9C'
querystring.unescape('https%3A%2F%2Fwww.baidu.com%3Fsearch%3D%E5%88%9B%E4%BD%9C')//解码为'https://www.baidu.com?search=创作'
mime
根据文件扩展名。
const mime = require('mime')
const type = mime.getType(str)//str为html时返回text/html;js时返回application/javascript;png时返回image/png。
cherrio
用来从网页中以css选择器取数据,使用方式和jquery基本相同。
const cheerio = require('cheerio')
const $ = cheerio.load(htmlStr)//将html的字符串转化为类似于dom的节点,后可以通过向jquery的方法选取到需要的内容。
$('.yf p').each((index, el)=>{ //选择类名为yf下的p标签存入数组。
console.log($(el).text()) //循环数组输出每个标签内的文字
})
gulp
自动化构建工具。
快速入门 · gulp.js 中文文档
axios
fetch简介和axios介绍(引用链接、get和post请求方式、自定义请求、请求拦截、官网)_YF-SOD的博客-CSDN博客_fetch请求拦截
命令行模块
npm、yarn
npm和yarn使用(官网、安装、命令行、上传自己的包、包版本号详解、更新卸载包、查看所有版本、同等依赖peer、可选依赖optional)_YF-SOD的博客-CSDN博客
nvm、nrm、npx
nvm、nrm、npx使用(安装、基本命令、参数、curl、wget)_YF-SOD的博客-CSDN博客
nodemon
可在检测到目录中的文件更改时通过自动重新启动节点(node启动服务器时,改变文件后需要重启,而通过nodemon启动服务器,改变文件保存会自动重启)。
http-server
轻量级服务器
使用指定端口8080启动服务器。