# 构建 Express 应用
在之前的文章中,我们学习了 JavaScript 的基础知识和 Node.js 的核心特性。现在,我们将进入 Node 学习路径的最后一篇,探讨如何使用 Express 框架构建前后端分离的 Web 应用。
# 安装 Express
npm init -y | |
npm install express |
# 创建第一个 Express 应用
const express = require('express'); | |
const app = express(); | |
const port = 3000; | |
app.use(express.json()); // 用于解析 JSON 格式的请求体 | |
app.get('/api/data', (req, res) => { | |
res.json({ message: 'Hello World!' }); | |
}); | |
app.listen(port, () => { | |
console.log(`Server is running at http://localhost:${port}`); | |
}); |
# RESTful API 设计
RESTful API 是一种设计 Web 服务的架构风格,它使用 HTTP 协议的 GET, POST, PUT, DELETE 等方法对资源进行操作。
# 设计原则
- 使用名词表示资源
- 使用 HTTP 方法表示操作
- 无状态通信
- 返回适当的 HTTP 状态码
# 路由与中间件
# 设计 API 路由
下面是一个简单的示例,展示如何设计包含 GET 和 POST 方法的 API 路由:
// 导入所需模块 | |
const express = require('express'); | |
const app = express(); | |
const port = 3000; | |
// 使用中间件解析 JSON 格式的请求体 | |
app.use(express.json()); | |
// GET 方法,获取资源 | |
app.get('/api/items/:id', (req, res) => { | |
const itemId = req.params.id; | |
// 根据 itemId 获取数据逻辑 | |
res.json({ id: itemId, name: 'Item Name' }); | |
}); | |
// POST 方法,创建资源 | |
app.post('/api/items', (req, res) => { | |
const newItem = req.body; | |
// 处理新项目创建逻辑 | |
res.status(201).json({ message: 'Item created successfully', item: newItem }); | |
}); | |
// PUT 方法,更新资源 | |
app.put('/api/items/:id', (req, res) => { | |
const itemId = req.params.id; | |
const updatedItem = req.body; | |
// 处理项目更新逻辑 | |
res.json({ message: 'Item updated successfully', item: updatedItem }); | |
}); | |
// DELETE 方法,删除资源 | |
app.delete('/api/items/:id', (req, res) => { | |
const itemId = req.params.id; | |
// 处理项目删除逻辑 | |
res.json({ message: 'Item deleted successfully' }); | |
}); | |
// 启动服务器 | |
app.listen(port, () => { | |
console.log(`Server is running at http://localhost:${port}`); | |
}); |
# 参数传递与验证
在实际应用中,我们需要对传入的参数进行验证,以确保数据的正确性和安全性。可以使用 express-validator
中间件进行参数验证:
npm i express-validator |
然后在代码中引入并使用:
const { body, validationResult } = require('express-validator'); | |
// POST 方法,创建资源,并验证参数 | |
app.post('/api/items', | |
[ | |
body('name').isString().withMessage('Name must be a string'), | |
body('price').isFloat().withMessage('Price must be a float'), | |
], | |
(req, res) => { | |
const errors = validationResult(req); | |
if (!errors.isEmpty()) { | |
return res.status(400).json({ errors: errors.array() }); | |
} | |
const newItem = req.body; | |
// 处理新项目创建逻辑 | |
res.status(201).json({ message: 'Item created successfully', item: newItem }); | |
} | |
); |
# 中间件概念
# 错误处理中间件
错误处理中间件用于捕获并处理应用中发生的错误:
app.use((err, req, res, next) => { | |
console.error(err.stack); | |
res.status(500).send({ message: 'Something broke!' }); | |
}); |
# 日志记录中间件
日志记录中间件可以用来记录请求信息:
app.use((req, res, next) => { | |
console.log(`${req.method} ${req.url} - ${new Date().toISOString()}`); | |
next(); | |
}); |
# 总结
通过本篇文章,我们学习了如何使用 Express 框架构建一个简单的 RESTful API,包括路由的设计、参数的验证以及中间件的编写。这些知识是构建现代 Web 应用的基础,也是成为一名全栈开发者的重要技能。继续实践和学习,你将能够在 Node.js 的世界中探索更多可能性。