Node.js简介

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,它让开发者能够使用 JavaScript 编写服务器端应用程序。本章将带你了解 Node.js 的基本概念、特点以及如何快速上手。

什么是 Node.js?

Node.js 是一个开源、跨平台的 JavaScript 运行环境,它允许在服务器端执行 JavaScript 代码。Node.js 基于 Google 的 V8 引擎(该引擎用于 Chrome 浏览器),并对其进行了优化,使其在服务器端表现出色。Node.js 使用事件驱动、非阻塞 I/O 模型,使其轻量且高效,特别适合数据密集型的实时应用。

Node.js 的包管理器 npm 是全球最大的开源库生态系统,提供了丰富的模块供开发者使用。

Node.js 的特点

  • 非阻塞 I/O:所有 I/O 操作(如文件读写、网络请求)都不会阻塞后续代码的执行,通过回调函数处理结果,极大提升了并发处理能力。
  • 事件驱动:Node.js 内部通过事件循环来处理异步操作,每当有事件触发时,会调用相应的回调函数。
  • 单线程 + 事件循环:Node.js 主线程是单线程的,但借助事件循环和非阻塞 I/O,可以高效处理大量并发请求,避免了多线程的上下文切换开销。
  • 跨平台:Node.js 可以运行在 Windows、Linux、macOS 等多个操作系统上。
  • 丰富的模块生态:npm 提供了超过百万个开源包,几乎任何功能都能找到现成的模块。
注意: 虽然 Node.js 是单线程的,但可以通过 worker_threads 模块创建多线程来处理 CPU 密集型任务。

安装 Node.js

要开始使用 Node.js,首先需要在你的计算机上安装它。以下是安装步骤:

  1. 访问 Node.js 官网,你会看到两个版本:LTS(长期支持版)Current(最新版)。建议初学者选择 LTS 版本,稳定性更高。
  2. 下载对应操作系统的安装包(.msi 用于 Windows,.pkg 用于 macOS,或者通过包管理器安装)。
  3. 运行安装包,按照提示完成安装(一般一路默认即可)。
  4. 安装完成后,打开终端(命令提示符),输入以下命令验证安装是否成功:
node -v
npm -v

如果看到版本号输出,说明安装成功。

第一个 Node.js 应用

让我们从一个经典的 "Hello World" 程序开始。创建文件 hello.js,写入以下代码:

console.log("Hello, Node.js!");

在终端中运行:

node hello.js

你会看到输出 Hello, Node.js!

创建一个简单的 HTTP 服务器

Node.js 的一个常见用途是创建 Web 服务器。以下代码创建一个简单的 HTTP 服务器,当访问 http://localhost:3000 时返回 "Hello World":

const http = require('http');

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World\n');
});

server.listen(3000, '127.0.0.1', () => {
  console.log('服务器运行在 http://127.0.0.1:3000/');
});

将代码保存为 server.js,运行 node server.js,然后在浏览器中打开 http://127.0.0.1:3000,你将看到 "Hello World"。

Node.js 模块系统

Node.js 采用 CommonJS 模块规范,每个文件都是一个独立的模块。模块通过 require 函数引入,通过 module.exportsexports 导出。

例如,创建一个模块 math.js

// math.js
const add = (a, b) => a + b;
const subtract = (a, b) => a - b;

module.exports = { add, subtract };

然后在另一个文件中使用它:

// app.js
const math = require('./math.js');
console.log(math.add(5, 3)); // 输出 8

npm 包管理器

npm 是 Node.js 的默认包管理器,用于安装、管理和发布模块。常用命令:

  • npm init - 初始化项目,创建 package.json 文件。
  • npm install <包名> - 安装一个包,并自动添加到 dependencies
  • npm install -g <包名> - 全局安装包。
  • npm uninstall <包名> - 卸载包。

例如,安装一个流行的框架 express

npm install express

异步编程模型

Node.js 大量使用异步操作,避免阻塞。传统的异步处理方式是回调函数,但回调嵌套过深会导致“回调地狱”。现代 Node.js 支持 Promise 和 async/await,使异步代码更易读。

例如,使用 fs 模块读取文件(异步回调版):

const fs = require('fs');
fs.readFile('file.txt', 'utf8', (err, data) => {
  if (err) throw err;
  console.log(data);
});

使用 Promise 版本(fs.promises):

const fs = require('fs').promises;
fs.readFile('file.txt', 'utf8')
  .then(data => console.log(data))
  .catch(err => console.error(err));

使用 async/await:

const fs = require('fs').promises;
async function readFile() {
  try {
    const data = await fs.readFile('file.txt', 'utf8');
    console.log(data);
  } catch (err) {
    console.error(err);
  }
}
readFile();

小结

Node.js 让 JavaScript 走出浏览器,成为服务端开发的利器。它凭借事件驱动和非阻塞 I/O 模型,在高并发场景下表现优异。通过 npm 生态系统,开发者可以快速构建各种应用。下一章我们将详细介绍 Node.js 的安装与环境配置。