返回

从头开始使用 Express 编写 CRUD REST API:指南

数据库

构建现代 Web 应用程序的 RESTful CRUD API

简介

RESTful API 已成为构建现代 Web 应用程序的基石。它们提供了一种标准化的方式来创建、检索、更新和删除数据。在本教程中,我们将使用流行的 Node.js 框架 Express 和 MongoDB 数据库,通过 Mongoose ORM 构建一个完整的 CRUD REST API。

步骤 1:设置

  • 安装 Node.js 和 npm
  • 创建一个新的 Node.js 项目
  • 安装 Express 和 Mongoose
mkdir express-crud-api
cd express-crud-api
npm init -y
npm install express mongoose

步骤 2:数据库模型

使用 Mongoose 定义任务模型:

const mongoose = require('mongoose');

const TaskSchema = new mongoose.Schema({
  title: { type: String, required: true },
  description: { type: String, required: true },
  completed: { type: Boolean, default: false },
});

module.exports = mongoose.model('Task', TaskSchema);

步骤 3:路由

定义 RESTful 路由:

const express = require('express');
const router = express.Router();
const Task = require('../models/Task');

// GET all tasks
router.get('/', async (req, res) => {
  try {
    const tasks = await Task.find();
    res.json(tasks);
  } catch (err) {
    res.status(500).json({ message: err.message });
  }
});

// GET a single task by ID
router.get('/:id', async (req, res) => {
  try {
    const task = await Task.findById(req.params.id);
    if (!task) return res.status(404).json({ message: 'Task not found' });
    res.json(task);
  } catch (err) {
    res.status(500).json({ message: err.message });
  }
});

// POST a new task
router.post('/', async (req, res) => {
  const task = new Task({
    title: req.body.title,
    description: req.body.description,
    completed: req.body.completed,
  });
  try {
    const savedTask = await task.save();
    res.json(savedTask);
  } catch (err) {
    res.status(500).json({ message: err.message });
  }
});

// PATCH an existing task
router.patch('/:id', async (req, res) => {
  try {
    const task = await Task.findById(req.params.id);
    if (!task) return res.status(404).json({ message: 'Task not found' });
    Object.assign(task, req.body);
    const updatedTask = await task.save();
    res.json(updatedTask);
  } catch (err) {
    res.status(500).json({ message: err.message });
  }
});

// DELETE a task
router.delete('/:id', async (req, res) => {
  try {
    const task = await Task.findById(req.params.id);
    if (!task) return res.status(404).json({ message: 'Task not found' });
    await task.remove();
    res.json({ message: 'Task deleted successfully' });
  } catch (err) {
    res.status(500).json({ message: err.message });
  }
});

module.exports = router;

步骤 4:主应用程序

设置主应用程序:

const express = require('express');
const mongoose = require('mongoose');
const taskRoutes = require('./routes/tasks');

const app = express();

// Connect to MongoDB
mongoose.connect('mongodb://localhost:27017/express-crud-api', {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});

// Middleware
app.use(express.json());

// Routes
app.use('/api/tasks', taskRoutes);

// Start server
app.listen(3000, () => {
  console.log('Server is listening on port 3000');
});

步骤 5:测试 API

  • 启动服务器:node app.js
  • 使用 Postman 或类似工具测试端点:
    • GET /api/tasks
    • GET /api/tasks/:id
    • POST /api/tasks
    • PATCH /api/tasks/:id
    • DELETE /api/tasks/:id

常见问题解答

  1. 什么是 RESTful API?
    RESTful API 遵循代表性状态转移(REST)原则,提供一种标准化的方式来访问和操作数据。

  2. 为什么使用 Mongoose?
    Mongoose 是一个 Node.js ORM,它简化了与 MongoDB 数据库的交互。

  3. 如何部署 API?
    您可以使用像 Heroku 或 AWS 这样的云平台来部署您的 API。

  4. 如何保护 API 免受未经授权的访问?
    您可以使用身份验证和授权机制,例如 JWT 或 OAuth2。

  5. 如何使用 API 来创建功能齐全的应用程序?
    您可以使用 API 作为后端,并将其与前端框架(例如 React 或 Angular)结合起来创建功能齐全的应用程序。