创建第一个 Node.js 应用

1. Node.js 简介和特性

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,它允许开发者使用 JavaScript 编写服务器端代码。Node.js 的主要特性包括:

  • 非阻塞 I/O:Node.js 使用事件驱动、非阻塞 I/O 模型,使其轻量且高效。
  • 单线程:Node.js 使用单线程事件循环机制来处理请求,避免了多线程的复杂性。
  • 跨平台:Node.js 可以在 Windows、macOS 和 Linux 等多种操作系统上运行。
  • 丰富的模块生态系统:Node.js 拥有庞大的模块库(npm),可以快速构建应用。

2. 环境搭建和版本管理(nvm)

在开始编写 Node.js 应用之前,首先需要安装 Node.js 和 npm(Node Package Manager)。为了方便管理 Node.js 版本,推荐使用 nvm(Node Version Manager)。

2.1 安装 nvm

在 macOS 和 Linux 上,可以使用以下命令安装 nvm:

curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash

在 Windows 上,可以从 nvm-windows 下载安装包。

2.2 安装 Node.js

安装 nvm 后,可以使用以下命令安装 Node.js:

nvm install node

安装完成后,可以使用以下命令验证安装是否成功:

node -v
npm -v

3. 创建第一个 Node.js 应用

3.1 初始化项目

首先,创建一个新的项目目录并进入该目录:

mkdir my-first-node-app
cd my-first-node-app

然后,使用 npm 初始化项目:

npm init -y

这会生成一个 package.json 文件,用于管理项目的依赖和脚本。

3.2 编写第一个 Node.js 脚本

在项目目录中创建一个名为 index.js 的文件,并添加以下代码:

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

3.3 运行脚本

在终端中运行以下命令来执行脚本:

node index.js

你应该会看到输出:

Hello, Node.js!

3.4 创建一个简单的 HTTP 服务器

接下来,我们将创建一个简单的 HTTP 服务器。在 index.js 文件中添加以下代码:

// index.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');
  res.end('Hello, World!\n');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

3.5 运行服务器

保存文件后,再次运行 node index.js。你应该会看到输出:

Server running at http://127.0.0.1:3000/

打开浏览器并访问 http://127.0.0.1:3000/,你应该会看到页面显示 Hello, World!。

4. 模块系统(CommonJS 和 ES Modules)

Node.js 支持两种模块系统:CommonJS 和 ES Modules。

4.1 CommonJS

CommonJS 是 Node.js 默认的模块系统,使用 require 和 module.exports 来导入和导出模块。

// math.js
module.exports = {
  add: (a, b) => a + b,
  subtract: (a, b) => a - b,
};

// index.js
const math = require('./math');

console.log(math.add(5, 3)); // 输出: 8
console.log(math.subtract(5, 3)); // 输出: 2

4.2 ES Modules

ES Modules 是 ECMAScript 标准的一部分,使用 import 和 export 来导入和导出模块。

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

// index.mjs
import { add, subtract } from './math.mjs';

console.log(add(5, 3)); // 输出: 8
console.log(subtract(5, 3)); // 输出: 2

5. 包管理器(npm 和 yarn)

npm 是 Node.js 的默认包管理器,而 yarn 是另一个流行的包管理器。

5.1 使用 npm

安装依赖包:

npm install express

在 package.json 中添加依赖:

{
  "dependencies": {
    "express": "^4.17.1"
  }
}

5.2 使用 yarn

安装 yarn:

npm install -g yarn

安装依赖包:

yarn add express

在 package.json 中添加依赖:

{
  "dependencies": {
    "express": "^4.17.1"
  }
}

6. 实践练习

6.1 练习 1:创建一个简单的计算器

创建一个名为 calculator.js 的文件,实现加法、减法、乘法和除法功能,并导出这些函数。然后在 index.js 中导入并使用这些函数。

6.2 练习 2:创建一个简单的静态文件服务器

使用 http 模块创建一个简单的静态文件服务器,能够提供 HTML、CSS 和 JavaScript 文件。

7. 总结

通过本教程,你已经学会了如何创建第一个 Node.js 应用,了解了 Node.js 的基本特性和模块系统,并掌握了使用 npm 和 yarn 管理依赖包的方法。接下来,你可以继续学习 Node.js 的更多高级特性,如事件循环、异步编程、文件系统操作等。