Node.js 简介与环境搭建

章节介绍

欢迎来到 Node.js 的世界!Node.js 是一个开源的跨平台 JavaScript 运行环境,它让开发者能够在浏览器之外运行 JavaScript 代码。本教程将从零开始,帮助您了解 Node.js 的基本概念,并搭建完整的开发环境。无论您是编程新手还是有一定经验的开发者,本教程都将引导您一步步掌握 Node.js 开发技能。

核心知识点

什么是 Node.js

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。与传统的 JavaScript 只能在浏览器中运行不同,Node.js 让 JavaScript 可以在服务器端运行,这意味着您可以使用同一种语言编写前端和后端代码。

Node.js 的核心特点:

  1. 跨平台:可以在 Windows、macOS、Linux 等多个操作系统上运行
  2. 高性能:基于 V8 引擎,执行速度快
  3. 事件驱动:采用非阻塞 I/O 模型,适合处理高并发
  4. 单线程:使用单线程模型,避免了线程管理的复杂性

Node.js 的工作原理

Node.js 采用事件驱动、非阻塞 I/O 的模型,这使得它非常适合处理大量的并发请求。当 Node.js 执行 I/O 操作(如读取文件、访问数据库)时,它不会阻塞线程,而是在操作完成后通过回调函数通知程序。

传统阻塞模型:
┌─────────────┐
│   线程 1   │ → 等待 I/O 完成 → 继续执行
└─────────────┘
┌─────────────┐
│   线程 2   │ → 等待 I/O 完成 → 继续执行
└─────────────┘
┌─────────────┐
│   线程 3   │ → 等待 I/O 完成 → 继续执行
└─────────────┘

Node.js 非阻塞模型:
┌─────────────┐
│  单线程主循环  │ → 发起 I/O 请求 → 继续处理其他任务
│              │   ↓
│              │ I/O 完成回调 → 处理结果
└─────────────┘

Node.js 的应用场景

Node.js 特别适合以下场景:

  1. Web 服务器:构建高性能的 Web 应用和 API
  2. 实时应用:聊天应用、实时协作工具
  3. 命令行工具:开发 CLI 工具和自动化脚本
  4. 微服务:构建轻量级的微服务架构
  5. 数据流应用:处理大量数据流的应用

Node.js 的安装

Node.js 的安装非常简单,支持多种操作系统:

Windows 系统:

  1. 访问 Node.js 官方网站:https://nodejs.org/
  2. 下载 LTS(长期支持)版本的安装包
  3. 双击安装包,按照提示完成安装
  4. 打开命令提示符,输入 node -v 检查安装是否成功

macOS 系统:

  1. 使用 Homebrew 安装:brew install node
  2. 或从官网下载 .pkg 安装包
  3. 打开终端,输入 node -v 检查安装

Linux 系统:

  1. 使用包管理器安装:
    sudo apt-get install nodejs npm  # Ubuntu/Debian
    sudo yum install nodejs npm     # CentOS/RHEL
  2. 或使用 NodeSource 仓库安装最新版本

开发工具配置

推荐的开发工具:

  1. 代码编辑器:Visual Studio Code(推荐)
  2. 版本管理:nvm(Node Version Manager)
  3. 包管理器:npm(随 Node.js 自动安装)

安装 nvm(推荐):

# Windows
# 下载 nvm-windows 安装包

# macOS/Linux
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash

使用 nvm 管理 Node.js 版本:

nvm install 18.17.0    # 安装指定版本
nvm use 18.17.0        # 切换版本
nvm list               # 列出已安装版本
nvm alias default 18.17.0  # 设置默认版本

验证安装

安装完成后,在命令行中运行以下命令验证:

node --version    # 查看 Node.js 版本
npm --version     # 查看 npm 版本

如果看到版本号,说明安装成功!

实用案例分析

案例:创建第一个 Node.js 程序

让我们创建一个简单的 Hello World 程序,体验 Node.js 的基本用法。

步骤 1:创建项目目录

mkdir hello-nodejs
cd hello-nodejs

步骤 2:创建程序文件

创建一个名为 app.js 的文件:

console.log('Hello, Node.js!');
console.log('欢迎来到 Node.js 的世界!');
console.log('这是您的第一个 Node.js 程序。');

步骤 3:运行程序

node app.js

您将看到以下输出:

Hello, Node.js!
欢迎来到 Node.js 的世界!
这是您的第一个 Node.js 程序。

案例:创建一个简单的 HTTP 服务器

让我们创建一个简单的 Web 服务器,这是 Node.js 最常见的应用场景。

步骤 1:创建服务器文件

创建 server.js 文件:

const http = require('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('Hello, World! 欢迎访问 Node.js 服务器!');
});

server.listen(port, hostname, () => {
  console.log(`服务器运行在 http://${hostname}:${port}/`);
});

步骤 2:启动服务器

node server.js

您将看到:

服务器运行在 http://127.0.0.1:3000/

步骤 3:访问服务器

打开浏览器,访问 http://127.0.0.1:3000/,您将看到:

Hello, World! 欢迎访问 Node.js 服务器!

代码解析

让我们逐行分析这个服务器代码:

const http = require('http');

这行代码引入了 Node.js 的内置 HTTP 模块。require 是 Node.js 中加载模块的方法。

const hostname = '127.0.0.1';
const port = 3000;

定义服务器的主机名和端口号。127.0.0.1 是本地回环地址,3000 是常用的开发端口。

const server = http.createServer((req, res) => {

使用 http.createServer() 方法创建一个 HTTP 服务器。这个方法接受一个回调函数,每当有新的请求到达时,这个回调函数就会被调用。

回调函数接收两个参数:

  • req(request):请求对象,包含请求的所有信息
  • res(response):响应对象,用于向客户端发送响应
  res.statusCode = 200;

设置 HTTP 响应状态码为 200,表示请求成功。

  res.setHeader('Content-Type', 'text/plain; charset=utf-8');

设置响应头的 Content-Type,指定返回的内容类型为纯文本,并设置字符编码为 UTF-8。

  res.end('Hello, World! 欢迎访问 Node.js 服务器!');

发送响应内容并结束响应。res.end() 方法会向客户端发送数据并关闭连接。

server.listen(port, hostname, () => {
  console.log(`服务器运行在 http://${hostname}:${port}/`);
});

让服务器监听指定的端口和主机名。当服务器成功启动后,回调函数会被执行,打印服务器地址。

案例:使用 package.json 管理项目

package.json 是 Node.js 项目的配置文件,用于管理项目信息和依赖。

步骤 1:初始化项目

npm init -y

这会创建一个默认的 package.json 文件:

{
  "name": "hello-nodejs",
  "version": "1.0.0",
  "description": "我的第一个 Node.js 项目",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

步骤 2:添加启动脚本

修改 package.json,添加启动脚本:

{
  "name": "hello-nodejs",
  "version": "1.0.0",
  "description": "我的第一个 Node.js 项目",
  "main": "server.js",
  "scripts": {
    "start": "node server.js",
    "dev": "node server.js"
  },
  "keywords": ["nodejs", "tutorial"],
  "author": "您的名字",
  "license": "ISC"
}

步骤 3:使用脚本启动服务器

npm start

现在您可以使用 npm start 命令启动服务器,而不需要记住具体的命令。

代码示例

示例 1:基础命令行交互

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question('请输入您的名字:', (answer) => {
  console.log(`您好,${answer}!欢迎学习 Node.js!`);
  rl.close();
});

示例 2:获取系统信息

const os = require('os');

console.log('操作系统类型:', os.type());
console.log('操作系统平台:', os.platform());
console.log('CPU 架构:', os.arch());
console.log('CPU 核心数:', os.cpus().length);
console.log('总内存:', (os.totalmem() / 1024 / 1024 / 1024).toFixed(2), 'GB');
console.log('空闲内存:', (os.freemem() / 1024 / 1024 / 1024).toFixed(2), 'GB');
console.log('主机名:', os.hostname());
console.log('用户主目录:', os.homedir());

示例 3:简单的计算器

const readline = require('readline');

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

rl.question('请输入第一个数字:', (num1) => {
  rl.question('请输入第二个数字:', (num2) => {
    const n1 = parseFloat(num1);
    const n2 = parseFloat(num2);

    console.log('\n计算结果:');
    console.log(`${n1} + ${n2} = ${n1 + n2}`);
    console.log(`${n1} - ${n2} = ${n1 - n2}`);
    console.log(`${n1} × ${n2} = ${n1 * n2}`);
    console.log(`${n1} ÷ ${n2} = ${(n1 / n2).toFixed(2)}`);

    rl.close();
  });
});

实现技巧与注意事项

开发环境配置建议

  1. 使用 VS Code:推荐使用 Visual Studio Code 作为代码编辑器,它对 JavaScript 和 Node.js 有很好的支持

  2. 安装有用的扩展

    • ESLint:代码质量检查
    • Prettier:代码格式化
    • Node.js Exec:直接在编辑器中运行 Node.js 代码
    • Auto Rename Tag:自动重命名标签
  3. 配置代码格式化
    在项目根目录创建 .prettierrc 文件:

    {
      "semi": true,
      "singleQuote": true,
      "tabWidth": 2,
      "trailingComma": "es5"
    }

常用命令速查

# Node.js 命令
node script.js           # 运行 JavaScript 文件
node --version          # 查看 Node.js 版本
node --help             # 查看帮助信息

# npm 命令
npm init                # 初始化项目
npm install             # 安装依赖
npm install <package>   # 安装指定包
npm update              # 更新依赖
npm run <script>       # 运行脚本
npm list               # 列出已安装的包

调试技巧

  1. 使用 console.log:最简单的调试方法

    console.log('调试信息:', variable);
  2. 使用 debugger 语句:在代码中设置断点

    debugger; // 程序会在这里暂停
  3. 使用 Node.js 调试器

    node inspect script.js

版本管理建议

  1. 使用 LTS 版本:生产环境推荐使用 LTS(长期支持)版本
  2. 定期更新:关注 Node.js 的安全更新和重要更新
  3. 使用 nvm:方便在不同项目间切换 Node.js 版本

常见问题与解决方案

问题 1:安装后 node 命令无法识别

原因:环境变量配置不正确

解决方案

  1. 重新启动命令行工具
  2. 检查环境变量 PATH 是否包含 Node.js 安装路径
  3. Windows 用户可能需要重启电脑

问题 2:npm 安装速度慢

原因:默认的 npm 源在国外

解决方案
使用淘宝 npm 镜像:

npm config set registry https://registry.npmmirror.com

问题 3:端口被占用

错误信息Error: listen EADDRINUSE: address already in use

解决方案

  1. 更换端口号
  2. 找到占用端口的进程并关闭:
    # Windows
    netstat -ano | findstr :3000
    taskkill /PID <进程ID> /F
    
    # macOS/Linux
    lsof -i :3000
    kill -9 <进程ID>

问题 4:模块找不到

错误信息Error: Cannot find module &#39;xxx&#39;

解决方案

  1. 确认模块名称拼写正确
  2. 检查是否在正确的目录中
  3. 运行 npm install 安装依赖

总结

本教程介绍了 Node.js 的基本概念、安装方法和开发环境配置。通过创建简单的程序和 HTTP 服务器,您已经体验了 Node.js 的基本用法。

通过本集的学习,您应该能够:

  1. 理解 Node.js 是什么以及它的核心特点
  2. 成功安装和配置 Node.js 开发环境
  3. 创建并运行简单的 Node.js 程序
  4. 搭建一个基本的 HTTP 服务器
  5. 使用 package.json 管理项目

在下一集中,我们将回顾 JavaScript 的基础知识,为后续的 Node.js 学习打下坚实的基础。准备好继续您的 Node.js 学习之旅了吗?让我们继续前进!

下一篇 » JavaScript 基础回顾