模块拆分及职责
- 路由模块(routes/userRoutes.js):
- 职责:负责定义与用户管理相关的HTTP路由,接收客户端请求,并将请求转发给对应的控制器方法。
- 控制器模块(controllers/userController.js):
- 职责:处理业务逻辑,如用户注册和登录逻辑。与数据库交互(假设存在数据库操作),验证输入数据等。
- 服务模块(services/userService.js):
- 职责:封装具体的业务操作,如用户注册、登录的核心算法。可以包含密码加密、用户数据查询等操作。
- 数据库模块(假设使用mongoose连接MongoDB,models/userModel.js):
- 职责:定义用户数据的模型结构,提供数据库操作方法,如保存用户、查找用户等。
代码示例
- 数据库模块(models/userModel.js)
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({
username: String,
password: String
});
module.exports = mongoose.model('User', userSchema);
- 服务模块(services/userService.js)
const User = require('../models/userModel');
const bcrypt = require('bcrypt');
const registerUser = async (username, password) => {
const hashedPassword = await bcrypt.hash(password, 10);
const newUser = new User({ username, password: hashedPassword });
return newUser.save();
};
const loginUser = async (username, password) => {
const user = await User.findOne({ username });
if (user) {
const isMatch = await bcrypt.compare(password, user.password);
if (isMatch) {
return user;
}
}
return null;
};
module.exports = {
registerUser,
loginUser
};
- 控制器模块(controllers/userController.js)
const { registerUser, loginUser } = require('../services/userService');
const register = async (req, res) => {
const { username, password } = req.body;
try {
const user = await registerUser(username, password);
res.status(201).json({ message: 'User registered successfully', user });
} catch (error) {
res.status(500).json({ error: 'Registration failed' });
}
};
const login = async (req, res) => {
const { username, password } = req.body;
try {
const user = await loginUser(username, password);
if (user) {
res.status(200).json({ message: 'Login successful', user });
} else {
res.status(401).json({ error: 'Invalid credentials' });
}
} catch (error) {
res.status(500).json({ error: 'Login failed' });
}
};
module.exports = {
register,
login
};
- 路由模块(routes/userRoutes.js)
const express = require('express');
const router = express.Router();
const { register, login } = require('../controllers/userController');
router.post('/register', register);
router.post('/login', login);
module.exports = router;
- 主应用文件(app.js)
const express = require('express');
const userRoutes = require('./routes/userRoutes');
const app = express();
app.use(express.json());
app.use('/users', userRoutes);
const port = 3000;
app.listen(port, () => {
console.log(`Server running on port ${port}`);
});