Node.js 运行时环境
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,让开发者能够使用 JavaScript 构建高性能的服务器端应用程序。
什么是 Node.js
Node.js 是一个开源的、跨平台的 JavaScript 运行时环境,具有以下特点:
- 事件驱动:非阻塞 I/O 模型
- 单线程:使用事件循环处理并发
- 跨平台:支持 Windows、macOS、Linux
- 包管理:npm 生态系统
核心特性
事件驱动架构
const fs = require('fs');
// 非阻塞文件读取
fs.readFile('input.txt', (err, data) => {
if (err) {
console.error('读取文件错误:', err);
return;
}
console.log('文件内容:', data.toString());
});
console.log('程序继续执行...');非阻塞 I/O
const http = require('http');
const server = http.createServer((req, res) => {
// 处理请求
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World\n');
});
server.listen(3000, () => {
console.log('服务器运行在 http://localhost:3000/');
});模块系统
// CommonJS 模块
const express = require('express');
const path = require('path');
// ES6 模块
import express from 'express';
import path from 'path';Node.js 版本
LTS 版本(长期支持)
- 偶数版本号(如 18.x, 20.x)
- 稳定性优先
- 适合生产环境
Current 版本(当前版本)
- 奇数版本号(如 19.x, 21.x)
- 新特性优先
- 适合开发测试
版本管理工具
# 使用 nvm 管理 Node.js 版本
nvm install 18.17.0
nvm use 18.17.0
nvm alias default 18.17.0
# 使用 n 管理版本
npm install -g n
n stable
n latest应用类型
Web 服务器
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('服务器启动在端口 3000');
});API 服务
const express = require('express');
const app = express();
app.use(express.json());
app.get('/api/users', (req, res) => {
res.json([
{ id: 1, name: '张三' },
{ id: 2, name: '李四' }
]);
});
app.post('/api/users', (req, res) => {
const { name } = req.body;
// 处理用户创建逻辑
res.status(201).json({ id: 3, name });
});命令行工具
#!/usr/bin/env node
const { program } = require('commander');
program
.name('my-cli')
.description('我的命令行工具')
.version('1.0.0');
program
.command('greet <name>')
.description('问候用户')
.action((name) => {
console.log(`你好, ${name}!`);
});
program.parse();桌面应用
const { app, BrowserWindow } = require('electron');
function createWindow() {
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
nodeIntegration: true
}
});
win.loadFile('index.html');
}
app.whenReady().then(createWindow);包管理
npm(Node Package Manager)
# 初始化项目
npm init
# 安装依赖
npm install express
npm install --save-dev nodemon
# 全局安装
npm install -g create-react-app
# 运行脚本
npm start
npm test
npm run buildyarn
# 安装 yarn
npm install -g yarn
# 安装依赖
yarn add express
yarn add --dev nodemon
# 运行脚本
yarn start
yarn testpnpm
# 安装 pnpm
npm install -g pnpm
# 安装依赖
pnpm add express
pnpm add -D nodemon
# 运行脚本
pnpm start
pnpm test核心模块
文件系统 (fs)
const fs = require('fs').promises;
async function readAndWriteFile() {
try {
const content = await fs.readFile('input.txt', 'utf8');
await fs.writeFile('output.txt', content.toUpperCase());
console.log('文件处理完成');
} catch (error) {
console.error('错误:', error);
}
}HTTP 模块
const http = require('http');
const https = require('https');
// HTTP 请求
const options = {
hostname: 'api.example.com',
port: 443,
path: '/data',
method: 'GET'
};
const req = https.request(options, (res) => {
let data = '';
res.on('data', (chunk) => {
data += chunk;
});
res.on('end', () => {
console.log(JSON.parse(data));
});
});
req.end();路径模块 (path)
const path = require('path');
console.log(path.join(__dirname, 'files', 'data.json'));
console.log(path.extname('file.txt'));
console.log(path.basename('/path/to/file.txt'));事件模块 (events)
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
myEmitter.on('event', (arg) => {
console.log('事件触发:', arg);
});
myEmitter.emit('event', 'Hello World');异步编程
Promise
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('数据获取成功');
}, 1000);
});
}
fetchData()
.then(data => console.log(data))
.catch(error => console.error(error));async/await
async function processData() {
try {
const data = await fetchData();
console.log(data);
} catch (error) {
console.error(error);
}
}流 (Streams)
const fs = require('fs');
const readStream = fs.createReadStream('input.txt');
const writeStream = fs.createWriteStream('output.txt');
readStream.pipe(writeStream);
readStream.on('end', () => {
console.log('文件复制完成');
});性能优化
内存管理
// 避免内存泄漏
const cache = new Map();
function getData(id) {
if (cache.has(id)) {
return cache.get(id);
}
const data = fetchDataFromDB(id);
cache.set(id, data);
// 设置缓存过期
setTimeout(() => {
cache.delete(id);
}, 60000);
return data;
}集群模式
const cluster = require('cluster');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`主进程 ${process.pid} 正在运行`);
// 创建工作进程
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`工作进程 ${worker.process.pid} 已退出`);
});
} else {
// 工作进程
require('./server.js');
console.log(`工作进程 ${process.pid} 已启动`);
}调试和监控
调试工具
// 使用 debugger 语句
function complexFunction() {
debugger;
// 复杂逻辑
}
// 使用 console 方法
console.log('普通日志');
console.error('错误信息');
console.warn('警告信息');
console.table([{ name: '张三', age: 25 }]);性能监控
const { performance } = require('perf_hooks');
const start = performance.now();
// 执行代码
setTimeout(() => {
const end = performance.now();
console.log(`执行时间: ${end - start} 毫秒`);
}, 1000);最佳实践
错误处理
process.on('uncaughtException', (error) => {
console.error('未捕获的异常:', error);
process.exit(1);
});
process.on('unhandledRejection', (reason, promise) => {
console.error('未处理的 Promise 拒绝:', reason);
});环境配置
// .env 文件
NODE_ENV=production
PORT=3000
DATABASE_URL=mongodb://localhost:27017/myapp
// 使用 dotenv
require('dotenv').config();
const port = process.env.PORT || 3000;
const dbUrl = process.env.DATABASE_URL;日志记录
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple()
}));
}学习资源
官方文档
社区资源
在线学习
- Node.js 官方教程
- freeCodeCamp
- Udemy
总结
Node.js 是一个强大的 JavaScript 运行时环境,特别适合构建高性能的网络应用程序。通过其事件驱动、非阻塞 I/O 的特性,Node.js 能够处理大量并发连接,是构建现代 Web 应用的理想选择。
最近更新:12/9/2025, 2:17:53 AM