Node.js 基础概念
🎯 学习目标
- 理解Node.js是什么以及它的核心特性
- 掌握Node.js的安装和基本使用
- 了解Node.js的架构和运行机制
- 学会使用Node.js REPL进行交互式编程
📚 核心概念
什么是Node.js?
Node.js是一个基于Chrome V8 JavaScript引擎构建的JavaScript运行时环境。它允许我们在服务器端运行JavaScript代码。
主要特点:
- 单线程:使用事件循环处理并发
- 非阻塞I/O:异步处理输入输出操作
- 跨平台:支持Windows、macOS、Linux
- 丰富的生态系统:npm包管理器提供大量第三方模块
Node.js架构
┌─────────────────┐
│ JavaScript │ ← 您的应用代码
├─────────────────┤
│ Node.js API │ ← fs, http, path等模块
├─────────────────┤
│ V8 Engine │ ← JavaScript执行引擎
├─────────────────┤
│ libuv │ ← 事件循环和线程池
├─────────────────┤
│ Operating │ ← 操作系统
│ System │
└─────────────────┘
事件驱动编程
Node.js采用事件驱动、非阻塞I/O模型:
javascript
// 事件驱动示例
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
// 监听事件
myEmitter.on('event', (data) => {
console.log('事件触发:', data);
});
// 触发事件
myEmitter.emit('event', 'Hello World');
🛠️ 安装和设置
安装Node.js
使用官方安装包
- 访问 nodejs.org
- 下载LTS版本(推荐)
- 按照安装向导完成安装
使用包管理器
bash# macOS (使用Homebrew) brew install node # Ubuntu/Debian sudo apt-get install nodejs npm # Windows (使用Chocolatey) choco install nodejs
使用版本管理器(推荐)
bash# 安装nvm (Node Version Manager) curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash # 安装最新LTS版本 nvm install --lts nvm use --lts
验证安装
bash
# 检查Node.js版本
node --version
# 或
node -v
# 检查npm版本
npm --version
# 或
npm -v
🚀 第一个Node.js程序
1. 创建项目目录
bash
mkdir my-first-node-app
cd my-first-node-app
2. 初始化项目
bash
npm init -y
这会创建 package.json
文件。
3. 创建第一个程序
创建 app.js
文件:
javascript
// app.js
console.log('Hello, Node.js!');
// 获取当前时间
const now = new Date();
console.log(`当前时间: ${now.toLocaleString()}`);
// 简单的计算
const a = 10;
const b = 20;
console.log(`${a} + ${b} = ${a + b}`);
4. 运行程序
bash
node app.js
输出:
Hello, Node.js!
当前时间: 2024/1/15 下午2:30:45
10 + 20 = 30
🔧 Node.js REPL
REPL(Read-Eval-Print Loop)是Node.js的交互式命令行工具。
启动REPL
bash
node
REPL常用命令
javascript
// 基本使用
> 1 + 1
2
> const name = 'Node.js'
undefined
> console.log(`Hello, ${name}!`)
Hello, Node.js!
undefined
// 多行输入
> function greet(name) {
... return `Hello, ${name}!`;
... }
undefined
> greet('World')
'Hello, World!'
// REPL命令
.help // 显示帮助
.exit // 退出REPL
.clear // 清除当前上下文
.save filename // 保存当前会话
.load filename // 加载文件到REPL
📁 项目结构
典型的Node.js项目结构:
my-node-app/
├── package.json # 项目配置和依赖
├── package-lock.json # 依赖版本锁定
├── node_modules/ # 第三方模块
├── src/ # 源代码
│ ├── index.js # 入口文件
│ ├── routes/ # 路由文件
│ ├── models/ # 数据模型
│ └── utils/ # 工具函数
├── public/ # 静态文件
├── tests/ # 测试文件
├── docs/ # 文档
└── README.md # 项目说明
🎯 实践练习
练习1:计算器程序
创建一个简单的计算器程序:
javascript
// calculator.js
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
function calculate(operation, a, b) {
switch (operation) {
case '+':
return a + b;
case '-':
return a - b;
case '*':
return a * b;
case '/':
return b !== 0 ? a / b : '错误:除数不能为零';
default:
return '错误:不支持的运算';
}
}
rl.question('请输入第一个数字: ', (num1) => {
rl.question('请输入运算符 (+, -, *, /): ', (operator) => {
rl.question('请输入第二个数字: ', (num2) => {
const result = calculate(operator, parseFloat(num1), parseFloat(num2));
console.log(`结果: ${result}`);
rl.close();
});
});
});
练习2:文件信息查看器
创建一个程序来查看文件信息:
javascript
// file-info.js
const fs = require('fs');
const path = require('path');
function getFileInfo(filePath) {
try {
const stats = fs.statSync(filePath);
const ext = path.extname(filePath);
const basename = path.basename(filePath);
console.log('文件信息:');
console.log(`文件名: ${basename}`);
console.log(`扩展名: ${ext}`);
console.log(`大小: ${stats.size} 字节`);
console.log(`创建时间: ${stats.birthtime}`);
console.log(`修改时间: ${stats.mtime}`);
console.log(`是否为文件: ${stats.isFile()}`);
console.log(`是否为目录: ${stats.isDirectory()}`);
} catch (error) {
console.error('错误:', error.message);
}
}
// 使用示例
const filePath = process.argv[2];
if (filePath) {
getFileInfo(filePath);
} else {
console.log('请提供文件路径作为参数');
console.log('用法: node file-info.js <文件路径>');
}
📝 总结
在这一章中,我们学习了:
- Node.js基础概念:什么是Node.js,它的特点和架构
- 安装和设置:如何安装Node.js和验证安装
- 第一个程序:创建和运行简单的Node.js程序
- REPL使用:交互式编程环境的使用
- 项目结构:典型的Node.js项目组织方式
- 实践练习:通过实际编程巩固知识
🔗 下一步
接下来我们将学习:
继续学习,掌握Node.js的核心概念!🚀