使用 Express.js 和 MongoDB 进行 CRUD 操作
本指南介绍如何使用 Express.js 和 MongoDB 实现 CRUD(创建、读取、更新、删除)操作。CRUD 是与数据库交互的基本概念,对于大多数 Web 应用程序来说都是必不可少的。
先决条件
项目设置
mkdir crud-express-mongodb cd crud-express-mongodb npm init -y
npm install express mongoose body-parser cors dotenv
crud-express-mongodb/ |-- models/ |-- routes/ |-- .env |-- server.js
步骤 1:设置 MongoDB 连接
文件:.env
MONGO_URI=mongodb://localhost:27017/crudDB PORT=5000
文件:server.js
const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
const cors = require("cors");
require("dotenv").config();
const app = express();
// Middleware
app.use(bodyParser.json());
app.use(cors());
// MongoDB Connection
mongoose
.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log("MongoDB Connected"))
.catch((err) => console.error("MongoDB connection error:", err));
// Routes
const itemRoutes = require("./routes/itemRoutes");
app.use("/api/items", itemRoutes);
// Start Server
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));第 2 步:创建 MongoDB 模式
文件:models/Item.js
const mongoose = require("mongoose");
const itemSchema = new mongoose.Schema({
name: {
type: String,
required: true,
},
description: {
type: String,
required: true,
},
price: {
type: Number,
required: true,
},
}, { timestamps: true });
module.exports = mongoose.model("Item", itemSchema);步骤 3:实现 CRUD 路由
文件: routes/itemRoutes.js
const express = require("express");
const router = express.Router();
const Item = require("../models/Item");
// Create an item
router.post("/", async (req, res) => {
try {
const newItem = new Item(req.body);
const savedItem = await newItem.save();
res.status(201).json(savedItem);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// Get all items
router.get("/", async (req, res) => {
try {
const items = await Item.find();
res.status(200).json(items);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// Get an item by ID
router.get("/:id", async (req, res) => {
try {
const item = await Item.findById(req.params.id);
if (!item) return res.status(404).json({ error: "Item not found" });
res.status(200).json(item);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// Update an item by ID
router.put("/:id", async (req, res) => {
try {
const updatedItem = await Item.findByIdAndUpdate(req.params.id, req.body, { new: true });
if (!updatedItem) return res.status(404).json({ error: "Item not found" });
res.status(200).json(updatedItem);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
// Delete an item by ID
router.delete("/:id", async (req, res) => {
try {
const deletedItem = await Item.findByIdAndDelete(req.params.id);
if (!deletedItem) return res.status(404).json({ error: "Item not found" });
res.status(200).json({ message: "Item deleted" });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
module.exports = router;步骤 4:测试 API
使用 Postman 或 cURL 等工具测试以下端点:
POST /api/items
Content-Type: application/json
{
"name": "Laptop",
"description": "A powerful laptop",
"price": 1200
}GET /api/items
GET /api/items/:id
PUT /api/items/:id
Content-Type: application/json
{
"name": "Gaming Laptop",
"description": "A high-end gaming laptop",
"price": 1500
}DELETE /api/items/:id