返回

Node.js express 轻松实现 CRUD 学生信息管理系统

前端

Node.js Express CRUD 学生信息管理系统

大家好,我是 Pubdreamcc。今天,我们将使用 Node.js 和 Express 框架构建一个基本的 CRUD(Create、Read、Update、Delete)学生信息管理系统。我们将学习如何使用 Express 路由来处理 HTTP 请求,如何使用 MongoDB 来存储和管理学生数据,以及如何使用 Pug 模板引擎来渲染 HTML 视图。

先决条件

在开始之前,您需要确保您已经安装了以下软件:

  • Node.js
  • Express
  • MongoDB
  • Pug

如果您还没有安装这些软件,请参考以下链接获取安装说明:

项目结构

我们的项目将由以下文件和文件夹组成:

  • app.js:Express 应用程序的主文件。
  • index.pug:主页的 Pug 模板文件。
  • students.js:处理学生数据的路由文件。
  • db.js:连接到 MongoDB 数据库的文件。
  • public 文件夹:包含静态文件(如 CSS、JavaScript 和图像)。
  • views 文件夹:包含 Pug 模板文件。

创建 Express 应用程序

首先,我们需要创建一个新的 Express 应用程序。为此,请在终端中运行以下命令:

npm init -y

这将创建一个名为 package.json 的文件,其中包含有关您的应用程序的基本信息。

接下来,我们需要安装 Express 和 Pug:

npm install express pug --save

这将在您的 package.json 文件中添加对 Express 和 Pug 的依赖项。

现在,我们可以创建一个新的 Express 应用程序了:

const express = require('express');
const app = express();

app.set('view engine', 'pug');
app.set('views', './views');

app.use(express.json());
app.use(express.urlencoded({ extended: true }));

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

此代码创建了一个新的 Express 应用程序并将其配置为使用 Pug 作为模板引擎。它还配置了应用程序以使用 Express 内置的 JSON 解析器和 URL 编码解析器中间件。最后,它将应用程序设置为在端口 3000 上侦听请求。

连接到 MongoDB 数据库

接下来,我们需要连接到 MongoDB 数据库。为此,我们需要安装 MongoDB 驱动程序:

npm install mongodb --save

这将在您的 package.json 文件中添加对 MongoDB 驱动程序的依赖项。

现在,我们可以连接到 MongoDB 数据库了:

const MongoClient = require('mongodb').MongoClient;

const mongoClient = new MongoClient('mongodb://localhost:27017', { useNewUrlParser: true, useUnifiedTopology: true });

mongoClient.connect((err, client) => {
  if (err) {
    console.error('Error connecting to MongoDB:', err);
    return;
  }

  const db = client.db('student-management-system');

  app.locals.db = db;
});

此代码连接到本地 MongoDB 数据库并将其存储在 app.locals.db 中。

创建学生模型

接下来,我们需要创建一个学生模型来存储学生数据。为此,请在 models 文件夹中创建一个名为 Student.js 的文件,并添加以下代码:

const mongoose = require('mongoose');

const studentSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true
  },
  email: {
    type: String,
    required: true
  },
  phone: {
    type: String,
    required: true
  }
});

const Student = mongoose.model('Student', studentSchema);

module.exports = Student;

此代码创建了一个新的学生模型,其中包含学生姓名、电子邮件和电话号码三个字段。

创建学生路由

接下来,我们需要创建学生路由来处理与学生数据相关的请求。为此,请在 routes 文件夹中创建一个名为 students.js 的文件,并添加以下代码:

const express = require('express');
const Student = require('../models/Student');

const router = express.Router();

// Create a new student
router.post('/students', async (req, res) => {
  const student = new Student(req.body);

  try {
    await student.save();
    res.status(201).send(student);
  } catch (err) {
    res.status(500).send(err);
  }
});

// Get all students
router.get('/students', async (req, res) => {
  try {
    const students = await Student.find();
    res.status(200).send(students);
  } catch (err) {
    res.status(500).send(err);
  }
});

// Get a single student by id
router.get('/students/:id', async (req, res) => {
  try {
    const student = await Student.findById(req.params.id);

    if (!student) {
      return res.status(404).send();
    }

    res.status(200).send(student);
  } catch (err) {
    res.status(500).send(err);
  }
});

// Update a student by id
router.put('/students/:id', async (req, res) => {
  try {
    const student = await Student.findByIdAndUpdate(req.params.id, req.body, { new: true });

    if (!student) {
      return res.status(404).send();
    }

    res.status(200).send(student);
  } catch (err) {
    res.status(500).send(err);
  }
});

// Delete a student by id
router.delete('/students/:id', async (req, res) => {
  try {
    const student = await Student.findByIdAndDelete(req.params.id);

    if (!student) {
      return res.status(404).send();
    }

    res.status(200).send(student);
  } catch (err) {
    res.status(500).send(err);
  }
});

module.exports = router;

此代码创建了一个新的 Express 路由器,其中包含五个路由:

  • POST /students:创建新的学生。
  • GET /students:获取所有学生。
  • GET /students/:id:获取单个学生。
  • PUT /students/:id:更新单个学生。
  • DELETE /students/:id:删除单个学生。

创建主页

最后,我们需要创建一个主页来显示所有学生。为此,请在 views 文件夹中创建一个名为 index.pug 的文件,并添加以下代码:

extends layout

block content
  h1 Students
  ul
    each student in students
      li
        a(href=`/students/${student._id}`) #{student.name}

此代码创建了一个新的 Pug 模板,其中包含一个 <h1> 标题和一个 `