用mongoDB数据库对CRUD案例进行改造

目录

安装mongoose: npm i mongoose

在终端开启mongoDB服务:mongod

app.js不变

student.js

const mongoose = require('mongoose')

mongoose.connect('mongodb://localhost/test')

var Schema = mongoose.Schema

var studentSchema = new Schema({
	name: {
		type: String,
		required: true
	},
	gender: {
		type: Number,
		enum: [0, 1],
		default: 0
	},
	age: {
		type: Number
	},
	hobbies: {
		type: String
	}
})

//直接导出模型构造函数
module.exports = mongoose.model('Student', studentSchema)

router.js

const express = require('express')
var Student = require('./student')

// 1. 创建一个路由容器
const router = express.Router()

// 2. 把路由都挂载到router路由容器中
router.get('/students', function (req, res) {
	Student.find(function (err, students) {
		if (err) {
			return res.status(500).send("Server Error.")
		}
		res.render('index.html', {
			students: students
		})
	})
})

router.get('/students/new', function (req, res) {
	res.render('new.html')
})

router.post('/students', function (req, res) {
	new Student(req.body).save(function(err) {
		if (err) {
			return res.status(500).send('Server Error.')
		}
		res.redirect('/students')
	})
})

router.get('/students/edit', function (req, res) {
	const id = req.query.id.replace(/"/g, '')
	Student.findById(id, function(err, student) {
		if (err) {
			return res.status(500).send('Server error.')
		}
		res.render('edit.html', {
			student: student
		})
	})
})

router.post('/students/edit', function (req, res) {
	// 1.获取表单数据 2.更新 3.发送响应
	const id = req.body.id.replace(/"/g, '')
	Student.findByIdAndUpdate(id, req.body, function (err) {
		if (err) {
			return res.status(500).send('Server error.')
		}
		res.redirect('/students')
	})
})

router.get('/students/delete', function (req, res) {
	const id = req.query.id.replace(/"/g, '')
	Student.findByIdAndRemove(id, function(err) {
		if(err) {
			return res.status(500).send('Server error.')
		}
		res.redirect('/students')
	})
})

//3. 把路由导出
module.exports = router

views/index.html

<!doctype html>
<html lang="zh-CN">
  <head>
    ...// 原代码不变
  </head>
  <body>
    <div class="container-fluid">
      <div class="row">
        <div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main">
          <h2 class="sub-header">学生信息表</h2>
          <a class="btn btn-success" href="/students/new">添加学生</a>
          <div class="table-responsive">
            <table class="table table-striped">
              ...// 原代码不变
              <tbody>
              	{{ each students }}
              	<tr>
                  <td>{{ $index + 1 }}</td>
                  <td>{{ $value.name }}</td>
                  <td>{{ $value.gender }}</td>
                  <td>{{ $value.age }}</td>
                  <td>{{ $value.hobbies }}</td>
                  <td>
                    <a href="/students/edit?id={{ $value._id }}">编辑</a>
                    <a href="/students/delete?id={{ $value._id }}">删除</a>
                  </td>
                </tr>
              	{{ /each}} 
              </tbody>
            </table>
          </div>
        </div>
      </div>
    </div>
  </body>
</html>

views/edit.html

<!doctype html>
<html lang="zh-CN">
  <head>
    ... //原代码不变
  </head>
  <body>
    <div class="container-fluid">
      <h3 class="sub-header">编辑学生</h3>
      <form action="/students/edit" method="post">
        <!-- 这里的id需要上传到服务器,但是又不希望被看见 -->
        <input type="hidden" name="id" value="{{ student._id }}">
        ... //原代码不变
      </form>
    </div>
    <script>
      ... //原代码不变
    </script>
  </body>
</html>

views/new.html不变

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漂流の少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值