把CRUD 案例改为MongoDB 数据库版本

本文介绍如何将基于Express的应用从文件存储方式改为使用MongoDB数据库。重点讲解了如何定义Mongoose模型并实现基本的CRUD操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前基于express写的案例是文件格式,现在连接MongoDB 数据库 对原案例进行修改。

主要就是student.js 修改如下:

ar mongoose = require('mongoose')

mongoose.connect('mongodb://localhost/itcast', { useMongoClient: true })

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 文件中修改调用 ,主要有一点是修改id 是字符串要换成数字,req.query.id.replace(/"/g, '') 

主要修改调用如下:

router.post('/students/new', function (req, res) {
 //填表单提交数据  1.获取表单数据 ,
 //2,处理(将数据保存到db.json 文件中用以持久化)  3,发送响应 
 //先读取出来,转对象,然后往对象push数据,然后对象转为字符串,然后再把字符串写入文件
    ///
        // 修改在这  
        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) {
	 // 1. 在客户端的列表页中处理链接问题(需要有 id 参数)
  // 2. 获取要编辑的学生 id
  // 
  // 3. 渲染编辑页面
  //    根据 id 把学生信息查出来
  //    使用模板引擎渲染页面
   // replace
  //    字符串模式
  //      简单,但是不支持全局和忽略大小写问题
  //    正则表达式模式
  //      强大,支持全局和忽略大小写

  Student.findById(req.query.id.replace(/"/g, ''), 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. 获取表单数据
  //    req.body
  // 2. 更新
  //    Student.updateById()
  // 3. 发送响应
  var 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) {
  // 1. 获取要删除的 id
  // 2. 根据 id 执行删除操作
  // 3. 根据操作结果发送响应数据
  var id = req.query.id.replace(/"/g, '')
	Student.findByIdAndRemove(id,function (err) {
    if (err) {
      return res.status(500).send('Server error.')
    }
    res.redirect('/students')
  })
})

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值