大家好,今天咱们来聊聊“宿舍管理系统”和“后端”的那些事儿。作为一个开发者,你可能经常听到“后端”这个词,但具体它是什么?怎么用?是不是有点懵?别急,今天我们就从头开始,手把手教你写一个宿舍管理系统的后端。
先说一下,什么是“后端”?简单来说,后端就是处理业务逻辑、数据库交互、API接口的部分。而“宿舍管理系统”呢,就是一个用来管理学生宿舍信息的系统,比如宿舍分配、学生信息、维修申请等等。那么,我们今天要做的,就是用后端技术来实现这个系统的核心功能。
首先,我们需要确定技术栈。这里我选择的是Node.js + Express + MongoDB,因为它们都是目前比较流行的后端技术,而且上手也比较容易。如果你对这些技术不太熟悉也没关系,我会尽量用口语化的方式解释清楚。
好了,先来安装一些必要的工具。你需要先在电脑上安装Node.js和MongoDB。如果你没装过,可以去官网下载安装包,然后按照步骤一步步来。安装完成后,你可以通过命令行输入`node -v`和`mongod`来验证是否安装成功。如果看到版本号或者启动提示,说明没问题。
接下来,我们创建一个项目文件夹,比如叫“dorm-system-backend”,然后进入这个文件夹,运行`npm init -y`来初始化一个npm项目。这一步会生成一个package.json文件,里面记录了项目的依赖和配置。
然后,我们需要安装Express框架,运行`npm install express`。Express是一个轻量级的Node.js框架,非常适合做REST API。接着,我们可以创建一个入口文件,比如叫“app.js”,然后在里面写一些基本的代码:
const express = require('express');
const app = express();
const port = 3000;
app.get('/', (req, res) => {
res.send('欢迎来到宿舍管理系统后端!');
});
app.listen(port, () => {
console.log(`服务器正在运行在 http://localhost:${port}`);
});
这段代码很简单,就是启动一个服务器,并且当访问根路径时返回一段欢迎语。你可以运行一下看看效果:在终端输入`node app.js`,然后打开浏览器访问http://localhost:3000,应该能看到“欢迎来到宿舍管理系统后端!”这句话。
现在,我们的后端已经跑起来了,接下来我们要添加一些功能。比如说,用户注册功能。这时候就需要连接数据库了。我们之前安装了MongoDB,现在需要在项目中引入Mongoose库,它是用于操作MongoDB的一个对象模型工具。
所以,继续运行`npm install mongoose`,然后在app.js里添加以下代码:
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/dorm-system', { useNewUrlParser: true, useUnifiedTopology: true })
.then(() => console.log('连接到数据库成功'))
.catch(err => console.error('连接数据库失败:', err));
这段代码的作用是连接本地的MongoDB数据库,数据库名称是“dorm-system”。如果连接成功,就会输出“连接到数据库成功”,否则会报错。
现在,我们定义一个用户模型。在项目中新建一个文件夹,比如叫“models”,然后在里面创建一个“User.js”文件,内容如下:
const mongoose = require('mongoose');
const UserSchema = new mongoose.Schema({
username: String,
password: String,
role: { type: String, default: 'student' }
});
module.exports = mongoose.model('User', UserSchema);
这个模型定义了一个用户的基本信息,包括用户名、密码和角色(默认是学生)。接下来,我们在app.js中添加一个注册接口:
const User = require('./models/User');
app.post('/register', async (req, res) => {
const { username, password } = req.body;
try {
const user = new User({ username, password });
await user.save();
res.status(201).send('注册成功');
} catch (err) {
res.status(400).send('注册失败');
}
});
这段代码接收一个POST请求,从请求体中获取username和password,然后保存到数据库中。如果成功,返回“注册成功”,否则返回错误信息。
为了测试这个接口,我们可以用Postman或者curl来发送POST请求。比如,用curl的话:
curl -X POST http://localhost:3000/register \
-H "Content-Type: application/json" \
-d '{"username":"test","password":"123456"}'
如果一切正常,你应该会看到“注册成功”的响应。
接下来,我们再加一个登录接口。这个接口需要验证用户是否存在,并且密码是否正确。在app.js中添加:
app.post('/login', async (req, res) => {
const { username, password } = req.body;
try {
const user = await User.findOne({ username });
if (!user || user.password !== password) {
return res.status(401).send('用户名或密码错误');
}
res.send('登录成功');
} catch (err) {
res.status(500).send('登录失败');
}
});
这个接口首先查找用户是否存在,如果不存在或者密码不匹配,就返回错误;否则返回登录成功的消息。
除了用户管理,宿舍管理系统还需要处理宿舍分配。我们也可以定义一个宿舍模型。在“models”文件夹中创建“Dorm.js”:
const mongoose = require('mongoose');
const DormSchema = new mongoose.Schema({
number: String,
capacity: Number,
students: [{ type: mongoose.Schema.Types.ObjectId, ref: 'User' }]
});
module.exports = mongoose.model('Dorm', DormSchema);
这个模型定义了宿舍的编号、容量和学生列表。其中学生列表是一个数组,每个元素是一个用户ID,引用自User模型。
然后,我们添加一个分配宿舍的接口。例如,在app.js中添加:
const Dorm = require('./models/Dorm');
app.post('/assign-dorm', async (req, res) => {
const { userId, dormNumber } = req.body;
try {
const user = await User.findById(userId);
const dorm = await Dorm.findOne({ number: dormNumber });
if (!user || !dorm) {
return res.status(404).send('用户或宿舍不存在');
}
if (dorm.students.length >= dorm.capacity) {
return res.status(400).send('宿舍已满');
}
dorm.students.push(user._id);
await dorm.save();
user.dorm = dorm._id;
await user.save();
res.send('宿舍分配成功');
} catch (err) {
res.status(500).send('分配失败');
}
});
这个接口接收用户ID和宿舍编号,查找对应的用户和宿舍,判断宿舍是否还有空位。如果有,就将用户加入宿舍,并更新用户信息。
到目前为止,我们已经实现了用户注册、登录、宿舍分配的功能。当然,这只是基础部分,实际系统还需要更多功能,比如查询宿舍信息、修改密码、查看分配情况等。
在开发过程中,我们还可以使用中间件来增强安全性,比如JWT(JSON Web Token)来实现身份验证。这样,用户登录后会获得一个token,后续请求都需要带上这个token才能访问受保护的资源。
比如,我们可以使用`jsonwebtoken`库来生成和验证token。安装方式是:
npm install jsonwebtoken
然后在登录接口中生成token:
const jwt = require('jsonwebtoken');
app.post('/login', async (req, res) => {
const { username, password } = req.body;
try {
const user = await User.findOne({ username });
if (!user || user.password !== password) {
return res.status(401).send('用户名或密码错误');
}
const token = jwt.sign({ id: user._id }, 'your-secret-key', { expiresIn: '1h' });
res.send({ token });
} catch (err) {
res.status(500).send('登录失败');
}
});
这样,用户登录后会得到一个token,后续请求可以通过在header中带上`Authorization: Bearer
另外,我们还可以使用中间件来验证token。例如:
function authenticateToken(req, res, next) {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
if (token == null) return res.sendStatus(401);
jwt.verify(token, 'your-secret-key', (err, user) => {
if (err) return res.sendStatus(403);
req.user = user;
next();
});
}

然后在需要权限的路由前加上这个中间件:
app.get('/protected', authenticateToken, (req, res) => {
res.send('这是一个受保护的接口');
});
这样,只有携带有效token的用户才能访问这个接口。
总结一下,今天我们用Node.js和Express搭建了一个简单的宿舍管理系统后端,实现了用户注册、登录、宿舍分配等核心功能。同时,我们也介绍了如何使用MongoDB进行数据存储,以及如何通过JWT实现身份验证。
虽然这只是一个小项目,但它涵盖了后端开发的基本流程:设计模型、编写接口、连接数据库、实现认证机制等。对于初学者来说,这样的项目非常适合作为入门练习,帮助理解后端开发的整体思路。
如果你对这个项目感兴趣,可以尝试扩展更多的功能,比如添加宿舍维修申请、管理员界面、数据统计等。另外,还可以考虑使用前端框架(如React或Vue)来构建一个完整的前后端分离系统。
最后,希望这篇文章能对你有所帮助,如果你有任何问题,欢迎留言交流!祝你编程愉快!
