# 构建 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 的世界中探索更多可能性。

更新于

请我喝[茶]~( ̄▽ ̄)~*

sensen 微信支付

微信支付

sensen 支付宝

支付宝