zoukankan      html  css  js  c++  java
  • 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;

    三、总结                                                                                              

    虽然现在走得很慢,但不会一直这么慢
  • 相关阅读:

    《银行》
    动画
    定位
    浮动
    《css的总结》
    Java的Debug调试
    Eclipse "Unable to install breakpoint due to missing line number attributes..."
    解决 Tomcat Server in Eclipse unable to start within 45 seconds 不能启动的问题
    Java下载文件(流的形式)
  • 原文地址:https://www.cnblogs.com/xxm980617/p/10555744.html
Copyright © 2011-2022 走看看