一、前言

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;

三、总结

node.js(小案例)_使用mongodb对学生信息列表优化的更多相关文章

  1. node.js(小案例)_实现学生信息增删改

    一.前言 本节内容主要对小案例做一个总结: 1.如何开始搭建小项目 2.路由设计 3.模块应用 4.项目源码以及实现过程github地址: 项目演示如下: 二.主要内容 1.项目的关键性js源码: 项 ...

  2. node.js小案例_留言板

    一.前言 通过这个案例复习: 1.node.js中模板引擎的使用 2.node.js中的页面跳转和重定向 二.主要内容 1.案列演示:  2.案列源码:https://github.com/45612 ...

  3. JS小案例--全选和全不选列表功能的实现

    纯js代码实现列表全选和全不选的功能 <!DOCTYPE html> <html> <head lang="en"> <meta char ...

  4. JS小案例:循环间隔重复变色

    在A.B.C三个区块中,有且仅有一个红色,要求红色每隔一秒即进入下一个区块,变色过程不断循环往复. 参考代码: <!DOCTYPE html> <html lang="zh ...

  5. KoaHub平台基于Node.js开发的Koa 连接支付宝插件代码信息详情

    KoaHub平台基于Node.js开发的Koa 链接支付宝插件代码信息详情 easy-alipay alipay payment & notification APIs easy-alipay ...

  6. node.js(node.js+mongoose小案例)_实现简单的注册登录退出

    一.前言 通过node.js基本知识对node.js基本知识的一个简单应用 1.注册 2.登录 3.退出 二.基本内容 1.项目结构搭建如图所示 2.这个小案列中用到了art-template子模板以 ...

  7. Node.js小项目——学生信息管理系统

    这是迄今为止第一次接触后端的东西,是一个很小的项目,但是对于前端学习入门很好.我是先学了VUE框架再学的Node,学起来比较轻松,不过每个人都有自己的学习方法️ 一.项目描述 学生信息管理系统,可以实 ...

  8. Vue.js小案例、生命周期函数及axios的使用

    一.调色框小案例: 随着三个滑动框的变化,颜色框的颜色随之改变 1.1.实例代码 <!DOCTYPE html> <html lang="en" xmlns:v- ...

  9. node.js小工具--修改Xcode 'Create by'作者名称

    简介 用Xcode创建源文件时会自动在文件开始位置加入如下注释: // // ISSImageCycleScrollView.m // SoftTravel // // Created by iss1 ...

随机推荐

  1. Lodop中特殊符号¥打印设计和预览不同

    Lodop中¥符号样式改变问题 Lodop中对超文本样式的解析,虽然说是按照调用的本机ie引擎,但是调用的ie版本可能不同,导致在ie下是一种样式,预览又是另一种样式.可能是有些样式没有具体设置,走的 ...

  2. MySQL in型子查询陷阱

    现在有两个表,table1和table2,table1有1千万数据(id 主键索引),table2有三条数据(uid字段 3,5,7): select * from table1 where id i ...

  3. React 学习(三) ---- state 和 事件处理函数

    在上两节中,我们讲述了props, 组件使用props进行渲染,但是这是一次性的, props渲染完成之后就不做任何事情了,但是现实中却不是这样的,当我们点击购物车上的加减按钮时,数量会自动加1或减1 ...

  4. Nginx http keepalive针对客户端行为指令

    keepalive 描述 多个http请求可以复用Tcp链接  减少握手次数 通过减少并发连接数减少服务器资源消耗 降低Tcp拥塞控制影响 Syntax: keepalive_disable none ...

  5. 对如下字符串(234453)[234]{2324}分析它的括号使用是否正确,括号匹配(Java实现)

    我的一种思路是递归: private static String s = "(2344[)]53[234]{2324}"; private static boolean f(int ...

  6. Error fetching command 'collectstatic': You're using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path. Command 'collectstatic' skipped

    报错现象 报错解决 在 settings.py 中添加这一句话则可以解决 STATIC_ROOT = os.path.join(BASE_DIR, 'static') 测试不在有问题

  7. mongoDB 命令整理

    库操作 创建数据库 use [database] 查看数据库 show dbs 删除 db.dropDatabase() 备份 mongodump -h[host] ip -d[databasenam ...

  8. MT【306】圆与椭圆公切线段

    已知椭圆方程$\dfrac{x^2}{4}+\dfrac{y^2}{3}=1$,圆方程$x^2+y^2=r^2,(3<r^2<4)$,若直线$l$与椭圆和圆分别切于点$P,Q$求$|PQ| ...

  9. MT【304】反射路径长度比

    (高考压轴题改编)如图,长方体$ABCD-A_1B_1C_1D_1$中,$AB=11,AD=7,AA_1=12.$一质点从顶点$A$设向$E(4,3,12)$遇到长方体的面反射(服从光的反射原理),将 ...

  10. 【java+selenium】网易云音乐刷累计听歌数

    背景应该是在去年的时候,刷知乎看到一个问题,大概是说怎么刷网易云音乐个人累计听歌数,然后有一个高赞回答,贴了一段js代码,直接在浏览器console执行就可以了.当时试了下,直接一下子刷了有好几万.悲 ...