在Node.js中使用Express框架实现一个简单的增删改查(CRUD)功能,通常涉及到三个主要层:模型层(Model)、服务层(Service)和控制器层(Controller)。下面是一个简单的示例,展示了如何构建这样一个结构。
1.初始化项目和安装依赖
首先,你需要创建一个新的Node.js项目,并安装Express和其他必要的依赖。
这里我们使用mongoose
来处理MongoDB的数据模型,body-parser
来解析请求体。
mkdir my-crud-app
cd my-crud-app
npm init -y
npm install express mongoose body-parser
2.创建模型层(Model)
在models
目录下创建一个文件,比如User.js
,用于定义数据模型。
// models/User.js
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true, unique: true }
});
module.exports = mongoose.model('User', userSchema);
3.创建服务层(Service)
在services
目录下创建一个文件,比如UserService.js
,用于定义业务逻辑。
// services/UserService.js
const User = require('../models/User');
async function createUser(user) {
return User.create(user);
}
async function getAllUsers() {
return User.find();
}
async function getUserById(userId) {
return User.findById(userId);
}
async function updateUser(userId, user) {
return User.findByIdAndUpdate(userId, user, { new: true });
}
async function deleteUser(userId) {
return User.findByIdAndDelete(userId);
}
module.exports = {
createUser,
getAllUsers,
getUserById,
updateUser,
deleteUser
};
4.创建控制器层(Controller)
在controllers
目录下创建一个文件,比如UserController.js
,用于处理HTTP请求。
// controllers/UserController.js
const UserService = require('../services/UserService');
async function createUser(req, res) {
try {
const user = await UserService.createUser(req.body);
res.status(201).json(user);
} catch (error) {
res.status(400).json({ message: error.message });
}
}
async function getAllUsers(req, res) {
try {
const users = await UserService.getAllUsers();
res.status(200).json(users);
} catch (error) {
res.status(500).json({ message: error.message });
}
}
async function getUserById(req, res) {
try {
const user = await UserService.getUserById(req.params.id);
if (!user) return res.status(404).json({ message: 'User not found' });
res.status(200).json(user);
} catch (error) {
res.status(500).json({ message: error.message });
}
}
async function updateUser(req, res) {
try {
const user = await UserService.updateUser(req.params.id, req.body);
if (!user) return res.status(404).json({ message: 'User not found' });
res.status(200).json(user);
} catch (error) {
res.status(500).json({ message: error.message });
}
}
async function deleteUser(req, res) {
try {
const user = await UserService.deleteUser(req.params.id);
if (!user) return res.status(404).json({ message: 'User not found' });
res.status(200).json({ message: 'User deleted' });
} catch (error) {
res.status(500).json({ message: error.message });
}
}
module.exports = {
createUser,
getAllUsers,
getUserById,
updateUser,
deleteUser
};
5.设置Express服务器
最后,设置Express服务器,并定义路由。
这个简单的示例展示了如何使用Express、Mongoose和基本的CRUD操作来构建一个RESTful API。你可以根据需要扩展模型和服务层,以适应更复杂的业务需求。
// index.js
const express = require('express');
const mongoose = require('mongoose');
const bodyParser = require('body-parser');
const UserController = require('./controllers/UserController');
const app = express();
const PORT = process.env.PORT || 3000;
// 连接MongoDB
mongoose.connect('mongodb://localhost/mycrudapp', { useNewUrlParser: true, useUnifiedTopology: true });
// 中间件
app.use(bodyParser.json());
// 路由
app.post('/users', UserController.createUser);
app.get('/users', UserController.getAllUsers);
app.get('/users/:id', UserController.getUserById);
app.put('/users/:id', UserController.updateUser);
app.delete('/users/:id', UserController.deleteUser);
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
Comments NOTHING