目录
30条常用的 Node.js 的命令(第1~60条在上一篇)
61. socketcluster - 高性能 WebSocket 框架
66. request-promise - 强化的 HTTP 请求库
69. node-telegram-bot-api - Telegram Bot API
70. webtorrent - 流媒体 torrent 客户端
71. puppeteer-cluster - 并行执行 Puppeteer 任务
74. node-jose - JSON Web Encryption 和 JSON Web Signature 库
75. node-red - 流编辑器和 Node.js 工作台
76. socket.io-redis - Socket.IO 适配器
77. node-pre-gyp - 编译和发布原生 Node.js 模块
80. node-linkedin - LinkedIn API 客户端
81. puppeteer-har - Puppeteer HAR 数据生成
83. nodemailer-express - Express 邮件服务
84. mongoose-paginate - Mongoose 分页插件
85. socket.io-emitter - Socket.IO 事件广播
88. node-telegram-bot-api - Telegram 机器人 API
前言
承接我上一篇发的文章,我们来继续探索 Node.js 的高级工具和命令,可以深入了解一些特定用途的工具,这些工具在特定场景下非常有用,可以帮助开发者解决复杂的问题,提高开发效率。
30条常用的 Node.js 的命令(第1~60条在上一篇)
61. socketcluster
- 高性能 WebSocket 框架
socketcluster
是一个高性能的 WebSocket 和 HTTP 框架,它支持自动重连、自动分片传输大文件等功能,适用于需要实时通信的大型应用。
# 安装 socketcluster
npm install socketcluster
# 使用 socketcluster 创建 WebSocket 服务器
const SocketCluster = require('socketcluster').Server;
const sc = new SocketCluster({ port: 8000 });
sc.on('connection', (conn) => {
conn.on('data', (data) => {
console.log('Received data:', data);
});
});
62. ws
- 简单 WebSocket 库
ws
是一个简单且快速的 WebSocket 库,用于 Node.js 服务器和客户端。
# 安装 ws
npm install ws
# 使用 ws 创建 WebSocket 服务器
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', (ws) => {
ws.on('message', (message) => {
console.log(`Received: ${message}`);
});
});
63. pg
- PostgreSQL 客户端库
# 安装 pg
npm install pg
# 使用 pg 连接 PostgreSQL 数据库
const { Pool } = require('pg');
const pool = new Pool({
user: 'dbuser',
host: 'localhost',
database: 'mydb',
password: 'secret',
port: 5432,
});
pool.query('SELECT NOW()', (err, res) => {
console.log(err, res);
});
64. mysql
- MySQL 客户端库
mysql
是 Node.js 的 MySQL 客户端库,它支持所有的 MySQL 功能,包括 SSL 和 compression。
# 安装 mysql
npm install mysql
# 使用 mysql 连接 MySQL 数据库
const mysql = require('mysql');
const connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'password',
database: 'my_db'
});
connection.connect();
connection.query('SELECT 1 + 1 AS solution', (error, results, fields) => {
if (error) throw error;
console.log('The solution is: ', results[0].solution);
});
65. sqlite
- SQLite 客户端库
sqlite
是一个轻量级的 SQLite 客户端库,适用于需要在 Node.js 中操作 SQLite 数据库的场景。
# 安装 sqlite
npm install sqlite
npm install sqlite3
# 使用 sqlite 操作 SQLite 数据库
const sqlite3 = require('sqlite3').verbose();
let db = new sqlite3.Database('mydb.sqlite');
db.serialize(() => {
db.run('CREATE TABLE IF NOT EXISTS my_table (info TEXT)');
const stmt = db.prepare('INSERT INTO my_table VALUES (?)');
for (let i = 0; i < 10; i++) {
stmt.run(`Test data #${i}`);
}
stmt.finalize();
db.each('SELECT rowid AS id, info FROM my_table', (err, row) => {
console.log(`${row.id}: ${row.info}`);
});
});
66. request-promise
- 强化的 HTTP 请求库
request-promise
是 request
库的改进版,它返回一个 Promise,使得异步 HTTP 请求更加简洁。
# 安装 request-promise
npm install request-promise
// 使用 request-promise 发起 GET 请求并解析 JSON 响应
const request = require('request-promise');
request('http://api.github.com')
.then(body => console.log(body))
.catch(err => console.error(err));
67. jsdom
- DOM 操作和模拟浏览器环境
jsdom
是一个纯 JavaScript 实现的 DOM 操作库,它提供了一个模拟浏览器环境,用于在 Node.js 中处理 HTML 和 DOM。
# 安装 jsdom
npm install jsdom
// 使用 jsdom 创建一个 DOM 环境
const { JSDOM } = require('jsdom');
const dom = new JSDOM('<!DOCTYPE html><html><body>Hello world</body></html>');
const { window } = dom;
global.window = window;
global.document = window.document;
global.navigator = {
userAgent: 'node.js'
};
68. node-notifier
- 桌面通知库
node-notifier
是一个跨平台的桌面通知库,它可以让你在开发过程中发送桌面通知。
# 安装 node-notifier(需要根据操作系统安装相应的二进制依赖)
npm install --save node-notifier
// 使用 node-notifier 发送通知
const notifier = require('node-notifier');
notifier.notify({
title: 'My app',
message: 'Hello world!'
});
69. node-telegram-bot-api
- Telegram Bot API
node-telegram-bot-api
是一个用于与 Telegram Bot API 交互的库,它允许你创建和管理 Telegram 机器人。
# 安装 node-telegram-bot-api
npm install node-telegram-bot-api
// 使用 node-telegram-bot-api 创建 Telegram 机器人
const TelegramBot = require('node-telegram-bot-api');
const token = 'YOUR_TELEGRAM_BOT_TOKEN';
const bot = new TelegramBot(token, { polling: true });
bot.onText(/\/echo (.*)/, (msg, match) => {
const chatId = msg.chat.id;
const resp = match[1];
bot.sendMessage(chatId, resp);
});
70. webtorrent
- 流媒体 torrent 客户端
webtorrent
是一个流媒体 torrent 客户端,它允许你在 Node.js 和浏览器中创建和下载 torrent 文件。
# 安装 webtorrent
npm install webtorrent
// 使用 webtorrent 下载 torrent
const WebTorrent = require('webtorrent');
const client = new WebTorrent();
const torrent = client.add('MAGNET_LINK');
torrent.on('ready', () => {
console.log('Torrent is ready and fully wired');
});
71. puppeteer-cluster
- 并行执行 Puppeteer 任务
puppeteer-cluster
是一个库,它允许你并行地运行多个 Puppeteer 任务,从而提高性能和效率。
# 安装 puppeteer-cluster
npm install puppeteer-cluster
# 使用 puppeteer-cluster 并行抓取网站
const { Cluster } = require('puppeteer-cluster');
(async () => {
const cluster = await Cluster.launch({
concurrency: Cluster.CONCURRENCY_PAGE,
maxConcurrency: 10, // Maximum number of pages per cluster
});
await cluster任務('https://example.com');
await cluster.close();
})();
72. node-opcua
- OPC UA 协议实现
node-opcua
是一个 OPC UA 协议的 Node.js 实现,它提供了一套完整的 OPC UA 服务器和客户端功能。
# 安装 node-opcua
npm install node-opcua
# 使用 node-opcua 创建 OPC UA 服务器
const { OPCUAServer } = require("node-opcua");
const server = new OPCUAServer({
port: 4840,
serverInfo: {
applicationName: "MyOpcuaServer"
}
});
await server.start();
73. ssh-config
- SSH 配置管理
ssh-config
是一个用于管理 SSH 配置的库,它允许你轻松地读取、修改和写入 SSH 配置文件。
# 安装 ssh-config
npm install ssh-config
# 使用 ssh-config 管理 SSH 配置
const SshConfig = require('ssh-config');
const config = new SshConfig();
config.load();
config.host.forEach((host) => {
console.log(host);
});
config.save();
74. node-jose
- JSON Web Encryption 和 JSON Web Signature 库
node-jose
是一个用于实现 JSON Web Encryption (JWE) 和 JSON Web Signature (JWS) 的库。
# 安装 node-jose
npm install node-jose
# 使用 node-jose 加密和签名数据
const nodeJose = require('node-jose');
const jose = nodeJose.JWE.createEncrypt();
const pem = 'your_private_key';
const payload = JSON.stringify({alg: 'RSA-OAEP', enc: 'A256GCM'});
jose
.setPEM(pem)
.update(JSON.stringify({hello: 'world'}))
.final((err, result) => {
if (err) {
console.error(err);
} else {
console.log(result.compact);
}
});
75. node-red
- 流编辑器和 Node.js 工作台
node-red
是一个基于 Node.js 的流编辑器,它提供了一个可视化的工作台,用于连接不同的 IoT 设备和服务。
# 安装 Node-RED(需要预先安装 Node.js 和 npm)
npm install -g --unsafe-perm node-red
# 启动 Node-RED
node-red
76. socket.io-redis
- Socket.IO 适配器
socket.io-redis
是一个 Socket.IO 的 Redis 适配器,它允许你通过 Redis 来广播和存储 Socket.IO 事件。
# 安装 socket.io-redis
npm install socket.io-redis
# 使用 socket.io-redis 作为 Socket.IO 的适配器
const server = require('http').createServer();
const io = require('socket.io')(server);
const redisAdapter = require('socket.io-redis');
io.adapter(redisAdapter({ host: 'localhost', port: 6379 }));
io.on('connection', (socket) => {
socket.on('message', (msg) => {
console.log(msg);
});
});
77. node-pre-gyp
- 编译和发布原生 Node.js 模块
node-pre-gyp
是一个工具,用于编译和发布预构建的原生 Node.js 模块,它简化了跨平台二进制模块的分发。
# 安装 node-pre-gyp
npm install -g node-pre-gyp
# 使用 node-pre-gyp 构建和发布模块
node-pre-gyp configure
node-pre-gyp build
node-pre-gyp package
78. node-resque
- 重试机制库
node-resque
是一个提供重试机制的库,它允许你定义重试策略,用于处理可能失败的异步操作。
# 安装 node-resque
npm install node-resque
# 使用 node-resque 重试操作
const resque = require('node-resque');
const operation = resque({
maxAttempts: 3,
baseDelay: 1000,
maxDelay: 5000
}, (err) => {
if (err) {
console.error('Operation failed after 3 attempts', err);
} else {
console.log('Operation succeeded');
}
});
operation.attempt(() => {
// 执行可能失败的操作
});
79. node-etcd
- etcd 客户端
node-etcd
是一个 etcd 的 Node.js 客户端,它提供了与 etcd 数据存储和配置共享服务交互的接口。
# 安装 node-etcd
npm install node-etcd
# 使用 node-etcd 与 etcd 交互
const Etcd = require('node-etcd');
const etcd = new Etcd();
etcd.set('key', 'value', (err, res) => {
if (err) throw err;
etcd.get('key', (err, res) => {
console.log(res.value);
});
});
80. node-linkedin
- LinkedIn API 客户端
node-linkedin
是一个用于与 LinkedIn API 交互的客户端库。
# 安装 node-linkedin
npm install node-linkedin
# 使用 node-linkedin 访问 LinkedIn API
const LinkedIn = require('node-linkedin');
const linkedIn = new LinkedIn({
accessToken: {
'oauth2.accessToken': 'YOUR_ACCESS_TOKEN',
'oauth2.expiresIn': 'EXPIRATION_TIME'
}
});
linkedIn.get('me', (error, profile) => {
if (error) {
console.error(error);
} else {
console.log(profile);
}
});
81. puppeteer-har
- Puppeteer HAR 数据生成
puppeteer-har
是一个用于从 Puppeteer 浏览器会话生成 HAR (HTTP Archive) 文件的库,这对于性能分析和网络请求记录非常有用。
# 安装 puppeteer-har
npm install puppeteer-har
# 使用 puppeteer-har 记录网络请求
const puppeteer = require('puppeteer');
const { recordHar } = require('puppeteer-har');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
const har = await recordHar(page);
await page.goto('https://example.com');
await browser.close();
console.log(har);
})();
82. node-cron
- 定时任务库
node-cron
是一个用于 Node.js 的定时任务库,它允许你以 Cron 格式安排定时任务。
# 安装 node-cron
npm install node-cron
# 使用 node-cron 安排定时任务
const cron = require('node-cron');
// 每天午夜执行任务
cron.schedule('0 0 * * *', () => {
console.log('Running my task at midnight');
});
83. nodemailer-express
- Express 邮件服务
nodemailer-express
是一个基于 Nodemailer 的 Express 中间件,它简化了在 Express 应用中发送电子邮件的过程。
# 安装 nodemailer-express
npm install nodemailer-express
# 使用 nodemailer-express 发送邮件
const nodemailer = require('nodemailer');
const nodemailerExpress = require('nodemailer-express')(nodemailer);
app.post('/send-email', nodemailerExpress.sendMail({
from: 'sender@example.com',
to: 'receiver@example.com',
subject: 'Test Email',
text: 'This is a test email'
}));
84. mongoose-paginate
- Mongoose 分页插件
mongoose-paginate
是一个 Mongoose 插件,它为 MongoDB 查询提供了分页功能。
# 安装 mongoose-paginate
npm install mongoose-paginate
# 使用 mongoose-paginate 实现分页
const mongoosePaginate = require('mongoose-paginate');
const UserSchema = new mongoose.Schema({ /* ... */ });
UserSchema.plugin(mongoosePaginate);
const User = mongoose.model('User', UserSchema);
// 分页查询
User.paginate({}, { page: 1, limit: 10 }, (err, result) => {
// handle result
});
85. socket.io-emitter
- Socket.IO 事件广播
socket.io-emitter
是一个用于在 Socket.IO 服务器和客户端之间广播事件的库。
# 安装 socket.io-emitter
npm install socket.io-emitter
# 使用 socket.io-emitter 广播事件
const io = require('socket.io')(httpServer);
const Emitter = require('socket.io-emitter');
const emitter = new Emitter(io);
emitter.on('event', (data) => {
console.log('Received event data:', data);
});
86. node-rsa
- RSA 加密和解密
node-rsa
是一个用于 RSA 加密和解密的库,它支持多种加密模式和密钥格式。
# 安装 node-rsa
npm install node-rsa
# 使用 node-rsa 加密和解密数据
const RSAKey = require('node-rsa');
const key = new RSAKey();
key.generateKeys(1024);
const encrypted = key.encrypt('Hello world!');
const decrypted = key.decrypt(encrypted, 'hex');
console.log(decrypted);
87. node-cache
- 缓存管理
node-cache
是一个简单的 Node.js 缓存管理库,它提供了内存缓存和自动清除过期缓存的功能。
# 安装 node-cache
npm install node-cache
# 使用 node-cache 管理缓存
const nodeCache = require('node-cache')();
nodeCache.set('key', 'value', 3600); // 设置缓存,过期时间为 1 小时
const value = nodeCache.get('key');
console.log(value);
88. node-telegram-bot-api
- Telegram 机器人 API
node-telegram-bot-api
是一个用于创建和管理 Telegram 机器人的库。
# 安装 node-telegram-bot-api
npm install node-telegram-bot-api
// 使用 node-telegram-bot-api 创建 Telegram 机器人
const TelegramBot = require('node-telegram-bot-api');
const token = 'YOUR_TELEGRAM_BOT_TOKEN';
const bot = new TelegramBot(token, { polling: true });
bot.onText(/\/help/, (msg) => {
bot.sendMessage(msg.chat.id, 'This is a help message');
});
89. node-schedule
- 灵活的调度库
node-schedule
是一个灵活的任务调度库,它允许你以 Cron 格式或其他方式安排任务。
# 安装 node-schedule
npm install node-schedule
// 使用 node-schedule 安排任务
const schedule = require('node-schedule').scheduleJob;
// 每天的午夜执行任务
schedule('0 0 * * *', function(){
console.log('Running the job');
});
90. node-uuid
- UUID 生成
node-uuid
是一个用于生成 UUID (Universally Unique Identifier) 的库。
# 安装 node-uuid
npm install uuid
// 使用 node-uuid 生成 UUID
const uuid = require('uuid');
const id = uuid.v4();
console.log(id);
总结
这些工具和库覆盖了 Node.js 开发的多个方面,包括性能分析、定时任务、邮件发送、分页、事件广播、加密解密、缓存管理、任务调度和 UUID 生成。掌握这些工具将帮助你构建更加健壮、高效和可维护的 Node.js 应用。随着你的项目需求不断增长,Node.js 的生态系统中总有新的工具和命令等待你去发现和利用。