Node.js 教程
Node.js 是一个开源、跨平台的 JavaScript 运行环境,让 JavaScript 可以脱离浏览器在服务器端运行。它基于 Chrome V8 引擎构建,具有高性能、事件驱动、非阻塞 I/O 等特点。
什么是 Node.js
核心概念
Node.js 不是一个框架,也不是一门新的编程语言,而是一个 JavaScript 运行环境。
单线程与事件循环
Node.js 采用单线程模型,但这并不意味着它不能处理并发:
- 单线程:主线程只有一个,避免多线程编程的复杂性
- 事件循环:通过事件循环机制处理并发请求
- 非阻塞 I/O:I/O 操作不会阻塞主线程
Node.js 与浏览器 JavaScript 的区别
| 特性 | Node.js | 浏览器 |
|---|---|---|
| 运行环境 | 服务器 | 浏览器 |
| 全局对象 | global | window |
| 模块系统 | CommonJS / ES Modules | ES Modules |
| 文件系统 | 可直接访问 | 受限/不可访问 |
| DOM | 无 | 有 |
| 网络请求 | http 模块 | fetch / XMLHttpRequest |
| 依赖管理 | npm | 无(通过 CDN 或打包工具) |
为什么选择 Node.js
优势
- 统一的技术栈:前后端都使用 JavaScript,降低学习成本
- 高性能:V8 引擎提供优秀的执行效率
- 丰富的生态系统:npm 拥有超过 200 万个包
- 非阻塞 I/O:天然适合处理高并发场景
- 跨平台:支持 Windows、macOS、Linux
- 活跃的社区:持续更新,问题容易找到解决方案
适用场景
不太适合的场景
- CPU 密集型计算:如视频编码、图像处理(可用 Worker Threads 或 C++ 插件解决)
- 大型企业应用:可能需要更成熟的框架如 Java Spring
Node.js 架构
核心组件
- V8 引擎:Google 开发的 JavaScript 引擎,负责解析和执行 JavaScript 代码
- Libuv:跨平台的异步 I/O 库,提供事件循环和线程池
- 核心模块:Node.js 内置的模块,如
fs、http、path等 - npm:Node.js 的包管理器,管理项目依赖
快速开始
第一个 Node.js 程序
创建 hello.js 文件:
// hello.js
console.log('Hello, Node.js!');
// 获取 Node.js 版本
console.log(`Node.js 版本: ${process.version}`);
// 获取当前工作目录
console.log(`当前目录: ${process.cwd()}`);
运行:
node hello.js
输出:
Hello, Node.js!
Node.js 版本: v20.10.0
当前目录: /path/to/your/project
创建 HTTP 服务器
// server.js
const http = require('node: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; charset=utf-8');
res.end('你好,Node.js!');
});
server.listen(port, hostname, () => {
console.log(`服务器运行在 http://${hostname}:${port}/`);
});
运行:
node server.js
访问 http://127.0.0.1:3000,你将看到 "你好,Node.js!"。
教程目录
入门基础
- 安装配置 - Node.js 环境搭建与配置
核心概念
内置模块
异步编程
- 异步编程 - 回调、Promise、async/await
Web 开发
- Express 框架 - 快速构建 Web 应用
进阶主题
参考资料
- 速查表 - Node.js 常用语法速查
学习建议
- 先掌握 JavaScript 基础:理解 ES6+ 语法、作用域、闭包等概念
- 理解异步编程:这是 Node.js 的核心,要深入理解事件循环
- 动手实践:每个知识点都要写代码验证
- 阅读官方文档:Node.js 官方文档质量很高
- 关注最佳实践:学习项目结构和代码规范