NPM 与 Express 快速入门
NPM 与 Express 快速入门
学习目标
在本章中,你将学会如何使用 npm
来管理项目依赖,并利用强大的 Express
框架来搭建一个结构清晰、功能完备的 Web 服务器,包括路由和中间件的使用。
虽然 Node.js 的核心模块很强大,但其生态系统的真正力量在于 npm
(Node Package Manager)——世界上最大的软件注册表。通过 npm
,我们可以轻松地发现、分享和使用由社区创建的数百万个可重用代码包。
1. npm
:Node.js 的包管理器
npm
是随 Node.js 一起安装的命令行工具。它帮助我们处理项目依赖、运行脚本等。
初始化项目
每个 Node.js 项目都应该有一个 package.json
文件。这个文件记录了项目的元数据(如名称、版本)和它所依赖的包。要创建一个 package.json
文件,请在你的项目根目录中运行:
npm init -y
-y
标志会使用默认值快速生成文件,避免了交互式提问。
安装包
假设我们想在项目中使用一个非常流行的工具库 lodash
。我们可以通过 npm install
命令来安装它:
# 安装 lodash 并将其保存到 dependencies
npm install lodash
安装完成后,你会发现:
- 项目根目录下出现了一个
node_modules
文件夹,其中包含了lodash
及其所有依赖包的源代码。 package.json
文件中增加了一个dependencies
字段,记录了lodash
的版本信息。
// package.json (部分)
{
"dependencies": {
"lodash": "^4.17.21"
}
}
dependencies
vs devDependencies
dependencies
:生产环境必需的包(如 Express 框架、数据库驱动)。devDependencies
:仅在开发过程中需要的包(如测试框架、代码格式化工具)。
要安装一个开发依赖,使用 --save-dev
或 -D
标志:
npm install nodemon -D
nodemon
是一个很棒的工具,它可以在你修改代码后自动重启服务器,极大地提高了开发效率。
2. Express
:快速构建 Web 应用
Express
是一个极简且灵活的 Node.js Web 应用框架。它提供了一系列强大的功能,可以帮助我们快速创建健壮的 API 和 Web 服务器。
安装 Express
首先,在你的项目中安装 Express
:
npm install express
创建第一个 Express 服务器
现在,让我们用 Express
重写之前的 "Hello, World!" 服务器。创建一个 server.js
文件:
// 引入 express
const express = require('express');
// 创建一个 express 应用实例
const app = express();
const port = 3000;
// 定义一个根路由 ('/') 的处理器
app.get('/', (req, res) => {
res.send('Hello from Express!');
});
// 启动服务器
app.listen(port, () => {
console.log(`Express 服务器运行在 http://localhost:${port}`);
});
代码是不是比原生 http
模块简洁多了?
路由 (Routing)
路由决定了应用程序如何响应客户端对特定端点(URI)的请求。Express
提供了非常直观的路由定义方式。
// GET 请求到 /users
app.get('/users', (req, res) => {
// 实际应用中会从数据库获取用户列表
const users = [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }];
res.json(users); // express 自动处理 JSON 序列化
});
// POST 请求到 /users
app.post('/users', (req, res) => {
// 这里需要中间件来解析请求体 (body)
res.status(201).send('用户创建成功');
});
中间件 (Middleware)
中间件是 Express
的核心概念。它们是在请求-响应周期中可以访问请求对象 (req
)、响应对象 (res
) 和下一个中间件函数的函数。
中间件可以执行以下任务:
- 执行任何代码。
- 修改请求和响应对象。
- 结束请求-响应周期。
- 调用下一个中间件。
一个常见的用例是解析传入请求的 JSON 体。Express
内置了此功能的中间件。
使用 express.json()
中间件的完整示例
const express = require('express');
const app = express();
const port = 3000;
// 使用内置中间件来解析 JSON 格式的请求体
app.use(express.json());
let users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' }
];
// 获取所有用户
app.get('/users', (req, res) => {
res.json(users);
});
// 创建一个新用户
app.post('/users', (req, res) => {
const newUser = req.body; // req.body 包含了客户端发送的 JSON 数据
if (!newUser || !newUser.name) {
return res.status(400).send('用户名是必需的');
}
newUser.id = users.length + 1;
users.push(newUser);
res.status(201).json(newUser);
});
app.listen(port, () => {
console.log(`服务器运行在 http://localhost:${port}`);
});
如何测试 POST
请求?
你可以使用 curl
或 Postman 等工具向 http://localhost:3000/users
发送一个 POST
请求,请求体为:
{
"name": "Charlie"
}
服务器将返回一个包含新用户信息的 JSON 响应。
总结
在本章中,我们迈出了一大步:
- ✅ 掌握了
npm
:学会了初始化项目、安装生产和开发依赖。 - ✅ 引入了
Express
:用更简洁的方式创建了 Web 服务器。 - ✅ 理解了路由:定义了不同 HTTP 方法和路径的处理器。
- ✅ 初识了中间件:使用
express.json()
来解析请求体。
下一步
我们已经能够构建基本的 Web 应用了。然而,Node.js 的一个核心挑战是处理异步操作。下一章,我们将深入探讨 Node.js 的异步编程模型,包括回调、Promise 和 async/await
。