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(基本不变)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//引入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') })
路由router.js
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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;
mongodb方式实现数据库操作student1.js
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//引入包 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)
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;
三、总结
虽然现在走得很慢,但不会一直这么慢