Skip to Content
Nextra 4.0 is released 🎉

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 build

yarn

# 安装 yarn npm install -g yarn # 安装依赖 yarn add express yarn add --dev nodemon # 运行脚本 yarn start yarn test

pnpm

# 安装 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