node.js(小案例)_使用mongodb对学生信息列表优化

一、前言                                                                                              

     1、这篇文章主要对上一篇案列在操作增删改的时候使用mongodb进行优化

 

     2、项目源码(包含上):https://github.com/4561231/crud-express-node.git

 

     3、参考:菜鸟教程,

                    https://mongoosejs.com/docs/guide.html

二、具体实现                                                                                       

1、关键性js代码

项目入口app.js(基本不变)

//引入express
var express = require('express');
var fs = require('fs');
//引入路由
var router = require('./router')

//引入body-parse

var bodyParse = require('body-parser')

//创建
var app = new express();
//请求访问

//配置开放静态资源
app.use('/public/', express.static('./public/'))
app.use('/node_modules/', express.static('./node_modules/'))


//用express来渲染
app.engine('html', require('express-art-template'))

//配置body-parse
app.use(bodyParse.urlencoded({ extended: false}));
app.use(bodyParse.json());


//使用router
app.use(router);


//设置端口
app.listen(5000, function () {

    console.log('server is running')
})
app.js

路由router.js

var fs = require('fs');
var express = require('express');
//加入student模块
var Student = require('./student1.js')



//express中转么提供了一种更好的方式可以用来包装路由
var router = express.Router();




//根据路径写好路由壳子


router.get('/students', function (req, res) {
   
   
   Student.find(function (err, students) {
    if(err) {
      return res.status(500).send('Server err');
    }
  
    res.render('index.html', {
      fruits: [
        '苹果',
        '香蕉',
        '橘子'
      ],
      students: students
    })
 })

});



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

router.post('/students/new', function (req, res) {
    console.log(req.body);
   var sudent = new Student(req.body)
   sudent.save(function (err) {
      if(err) {
         return res.status(500).send('Server err');
      }

      res.redirect('/students')
    })

});

//这一次通过get到那个编辑页面
router.get('/students/edit', function (req, res) {

  //调用得到的是保存之后的数据
  //1.如何获取数据
  //2.处理数据
  //3.发送响应
  //4.将数据再次写入data.json文件
  console.log(req.query.id);
  Student.findById(req.query.id.replace(/"/g,''), function (err, student) {
    if (err) {
      return res.status(500).send('Server err');
    }
    //console.log(student);
    res.render('edit.html',{

      student: student
    })
  })

});


router.post('/students/edit', function (req, res) {

 Student.updateByIdAndUpdate(req.body, function(err){
   if (err){
    return res.status(500).send('Server err');
   }

   res.redirect('/students')


 })
 


});

router.get('/students/delete', function(req, res) {
  Student.findByIdAndRemove(req.query.id.replace(/"/g,''), function (err) {

    if(err) {
      return res.status(500).send('Server err');
    }

    res.redirect('/students')
  })
});

//最后还要导出这个路由
module.exports = router;
router.js

mongodb方式实现数据库操作student1.js

//引入包
var mongoose = require('mongoose');

//连接数据库
mongoose.connect('mongodb://localhost/test');

//建立数据库架构
var Schema = mongoose.Schema;

var studentSchema  = new Schema({
   name: {
       type: String,
       require: true
   },

   

   gender: {
       type: Number,
       enum: [0,1],
       default: 0

   },

   age: {
       type: Number
   }
   ,

   hobbies: {
       type: String
   }
})
//导出
module.exports=mongoose.model('Student',studentSchema) 
student1.js

 

2、通过mongodb可以很容易操作数据(不熟悉mongodb可以参考菜鸟教程)

     第一步:先安装mongoose这个包,然后搭建数据库如下所示

//引入包
var 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中引用

var fs = require('fs');
var express = require('express');
//加入student模块
var Student = require('./student1.js')



//express中转么提供了一种更好的方式可以用来包装路由
var router = express.Router();




//根据路径写好路由壳子


router.get('/students', function (req, res) {
   
   //mongodb中直接用find方法来查找所有信息
   Student.find(function (err, students) {
    if(err) {
      return res.status(500).send('Server err');
    }
  
    res.render('index.html', {
      fruits: [
        '苹果',
        '香蕉',
        '橘子'
      ],
      students: students
    })
 })

});



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

router.post('/students/new', function (req, res) {
    console.log(req.body);

//mongodb中用save来保存,添加信息
   var sudent = new Student(req.body)

   sudent.save(function (err) {
      if(err) {
         return res.status(500).send('Server err');
      }

      res.redirect('/students')
    })

});

//这一次通过get到那个编辑页面
router.get('/students/edit', function (req, res) {

  //调用得到的是保存之后的数据
  //1.如何获取数据
  //2.处理数据
  //3.发送响应
  //4.将数据再次写入data.json文件
  console.log(req.query.id);

//mongodb中直接用findById来查询具体的某条信息
  Student.findById(req.query.id.replace(/"/g,''), function (err, student) {
    if (err) {
      return res.status(500).send('Server err');
    }
    //console.log(student);
    res.render('edit.html',{

      student: student
    })
  })

});


router.post('/students/edit', function (req, res) {

//mongdb中也可以根据如下来更新某一个信息
 Student.updateByIdAndUpdate(req.body, function(err){
   if (err){
    return res.status(500).send('Server err');
   }

   res.redirect('/students')


 })
 


});

router.get('/students/delete', function(req, res) {
//根据id删除具体的对象
  Student.findByIdAndRemove(req.query.id.replace(/"/g,''), function (err) {

    if(err) {
      return res.status(500).send('Server err');
    }

    res.redirect('/students')
  })
});

//最后还要导出这个路由
module.exports = router;

 

三、总结                                                                                              

posted @ 2019-03-18 22:38  mysunshine_SZZ  阅读(489)  评论(0编辑  收藏  举报