Node.js 基础概念

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,允许在服务器端运行 JavaScript 代码。它是单线程、非阻塞 I/O 模型,适合构建高性能、轻量级的网络应用。以下是 Node.js 的基础概念,用简洁的中文讲解:

1. Node.js 的核心特点

  • 异步非阻塞 I/O:Node.js 使用事件驱动模型,I/O 操作(如读写文件、网络请求)是异步的,不会阻塞主线程,适合高并发场景。
  • 单线程:Node.js 主线程是单线程的,但通过事件循环(Event Loop)和工作线程池处理异步任务。
  • 模块化:Node.js 使用 CommonJS 模块系统,通过 require 导入模块,module.exports 导出模块。
  • 跨平台:可在 Windows、macOS、Linux 上运行。

2. 事件循环(Event Loop)

事件循环是 Node.js 的核心机制,负责处理异步操作。流程如下:

  1. 事件队列:异步任务(如定时器、I/O 操作)完成后,回调函数被放入事件队列。
  2. 事件循环:主线程不断检查事件队列,执行回调。
  3. 阶段:事件循环分为多个阶段(如定时器、I/O 回调、setImmediate 等),按顺序处理。

示例:

setTimeout(() => {
  console.log("定时器回调");
}, 1000);

console.log("同步代码先执行");

输出:先打印“同步代码先执行”,1秒后打印“定时器回调”。

3. 模块系统

Node.js 使用 CommonJS 模块化机制:

  • 导入模块:使用 require 加载内置模块、第三方模块或自定义模块。
  const fs = require("fs"); // 内置模块
  const myModule = require("./myModule"); // 自定义模块
  • 导出模块:使用 module.exportsexports
  // myModule.js
  module.exports = {
    sayHello: () => console.log("Hello!");
  };

4. 内置模块

Node.js 提供许多内置模块,无需额外安装。常用模块包括:

  • fs(文件系统):读写文件。
  const fs = require("fs");
  fs.readFile("file.txt", "utf8", (err, data) => {
    if (err) throw err;
    console.log(data);
  });
  • http:创建 HTTP 服务器。
  const http = require("http");
  const server = http.createServer((req, res) => {
    res.end("Hello, Node.js!");
  });
  server.listen(3000);
  • path:处理文件路径。
  const path = require("path");
  console.log(path.join(__dirname, "file.txt"));

5. NPM(Node Package Manager)

  • 作用:Node.js 的包管理工具,用于安装和管理第三方模块。
  • 常用命令
  • 初始化项目:npm init
  • 安装模块:npm install <package>
  • 全局安装:npm install -g <package>
  • package.json:记录项目依赖和元信息。

6. 异步编程

Node.js 的异步编程主要依赖以下方式:

  • 回调函数:传统方式,可能导致“回调地狱”。
  fs.readFile("file.txt", (err, data) => {
    if (err) throw err;
    console.log(data);
  });
  • Promise:更优雅的异步处理。
  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();
  • async/await:基于 Promise 的语法糖,代码更简洁。

7. 全局对象

Node.js 没有浏览器的 windowdocument,但提供全局对象:

  • process:提供运行时信息,如环境变量。
  console.log(process.env.NODE_ENV);
  • __dirname__filename:当前模块的目录路径和文件路径。
  • setTimeoutsetInterval:与浏览器类似,用于定时任务。

8. 常用场景

  • Web 服务器:使用 Express 或 Koa 框架快速搭建。
  • 命令行工具:Node.js 可开发 CLI 工具。
  • 实时应用:如聊天室、在线游戏,结合 WebSocket。

示例:简单 HTTP 服务器

const http = require("http");

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

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

9. 调试与错误处理

  • try-catch:捕获同步错误。
  • Error 对象:处理异步错误。
  • 调试工具:Node.js 内置调试器或 VS Code 调试插件。

10. 学习建议

  • 熟悉异步编程,掌握 Promise 和 async/await。
  • 学习 Express 框架,快速开发 Web 应用。
  • 阅读 Node.js 官方文档,了解内置模块。
  • 使用 npm 探索第三方模块。

如果需要深入讲解某个部分(例如事件循环、Express 或具体模块),请告诉我!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注