Node-curd案例(Mongodb版本)
2021/4/24 19:26:47
本文主要是介绍Node-curd案例(Mongodb版本),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
//数据库模式设计 Student.js var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/Student',{ useNewUrlParser: true}); //设计学生数据库的模式 var StudentSchema = new mongoose.Schema({ Sno: { type: String, require: true }, Name: { type: String, require: true }, Age: { type: Number, require: true }, Gender: { type: Number, require: true, enum: [0,1] }, Hobbies: { type: String } }); //直接导出模型构造函数 module.exports = mongoose.model('Student',StudentSchema); //router.js var fs = require('fs'); var url = require('url'); var express = require('express'); /* { _id: 60827233984ce42cdc3c0385, Sno: '12301', Name: 'James', Age: 18, Gender: 1, Hobbies: 'King of basketball', __v: 0 } */ //获取封装各种调用函数的文件 var Student = require('./Student.js'); //创建路由器 var router = express.Router(); //路由容器,用来存放各种各样的路由 //主页面的views目录要和app.js目录同级 router.get('/',function(request,response){ //从文件中读取数据,(因为读取文件时,默认读取格式是16进制)第二个参数是文件传输格式,也可以选择用函数 data.toString()进行转换; //500状态码,服务端出错状态码 /* //根据条件查找文档,如果条件为空则查询所有数据 //返回的是一个数组,数组里的每一项为一个对象 //查询名叫张三的 User.find({name: '张三'}).then(result => console.log(result)); //查找年龄大于20小于30的 User.find({age: {$gt: 20, $lt: 40}}).then(result => console.log(result)); // 返回的是一个对象,默认返回当前集合中的第一条文档 User.findOne({name: '张三'}).then(result => console.log(result)); //对查找到的数据进行处理 // 查询所有数据中的指定字段 User.find().select('name email -_id').then(result => console.log(result)); // 根据年龄字段进行升序排列 User.find().sort('age').then(result => console.log(result)); // 根据年龄字段进行降序排列 User.find().sort('-age').then(result => console.log(result)); // 查询的数据跳过前两条结果 限制显示5条结果,通常用于数据的分页显示 User.find().skip(2).limit(5).then(result => console.log(result)); */ Student.find(function(error , students){ if(error){ return response.status(500).send('Server error!'); }else{ response.render('index.html',{ Students: students }); } }); }); //Save保存学生的函数有两个参数: /* 第一个参数: 包含学生信息的对象 第二个参数: 处理学生对象的回调函数 回调函数的参数: 第一个参数: error 参数,读取成功返回null,失败则返回一个对象 第二个参数:从文件中读出的包含students的data对象 */ router.post('/add',function(request,response){ //用模式构造函数构造一个对象,接收post请求体的数据 var temp = new Student(request.body); //将接收到的数据,保存进数据库 temp.save(function(error,result){ if(error){ return response.render('404.html'); }else{ //若新增的数据保存成功,则通过查询数据,并返回 ,Mongodb的模式构造函数的方法传回的查询结果传给回调函数,而不是模式构造函数本身 Student.find(function(error,result){ if(error){ return response.render('404.html'); }else{ return response.render('index.html',{ Students: result }) } }); } }); }); /* 在用户点击编辑后,将相应id的学生信息返回服务端,服务端再渲染给编辑方框进行修改 */ router.get('/edit',function(request,response){ let id = request.query.id; //当收到edit请求之后,回调数据库的两个查找方法,重新渲染编辑列表以及展示列表 Student.findOne({ Sno: id },function(error,result){ if(error){ response.render('404.html'); }else{ Student.find(function(error,students){ if(error){ response.render('404.html'); }else{ return response.render('index.html',{ Students: students, Sno: result.Sno, Name: result.Name, Age: result.Age, Gender: result.Gender, Hobbies: result.Hobbies, }) } }); //response.redirect(302,'/'),301是永久重定向,302是临时重定向; } }); }); /* 用户修改完毕后,点击Update按钮,更新数据发送给服务端,服务端再重新渲染页面 db.collection.update(criteria,objNew,upsert,multi) 参数 参数 描述 criteria 查询条件,类似关系型数据库的update语句内where后面的内容。 objNew update的对象和一些更新的操作符(如$、$inc等),也可以理解为关系型数据库update语句内set后面的内容。 upsert 如果不存在update的记录,是否插入objNew这个新的document。true为插入,默认是false,不插入。 multi 默认是false,只更新找到的第一条记录。如果为true,按条件查出来的多条记录全部更新 User.updateOne({name: '李四'}, {name: '李狗蛋' ,age: 28, }).then(result => console.log(result)); // 更新多个数据 User.updateMany({}, {age: 66}).then(result => console.log(result)); */ router.post('/update',function(request,response){ console.log(request.body.Sno); //第一个参数是查询匹配特征,第二个参数是修改的内容,第三个是回调参数,输出结果 Student.findOneAndUpdate(request.body.Sno,request.body,function(error,result){ if(error){ response.render('404.html'); }else{ response.redirect(301,'/'); } }); }); //删除相应学生的所有信息 /* // 查找到一条文档并且删除 // 返回删除的文档,如果查询到多条文档,那么将会删除第一条 User.findOneAndDelete({name: '张三'}).then(result => console.log(result)); // 删除多条文档,没有条件则删除调所有的数据 User.deleteMany({}).then(result => console.log(result)); */ router.get('/delete',function(request,response){ Student.findOneAndRemove(request.query.Sno,function(error,Students){ if(error){ return response.render('404.html'); } else{ response.redirect(302,'/'); } }); }); //导出路由容器 module.exports = router; //主页面, app.js var express = require('express'); var fs = require('fs'); var router = require('./router'); //将 post 的body 添加到 url 对象的属性中 var bodyParser = require('body-parser'); var app = express(); //配置body-parser(中间件),专门用来解析post 的请求体 app.use(bodyParser.urlencoded({ extended : false})); app.use(bodyParser.json()); //处理页面中各种链接请求,将各种静态资源统一放在一个开头相同的文件中,当服务端收到新的链接请求时,就会到相应目录中去寻找 app.use ('/node_modules',express.static('../node_modules/')); app.use('/views/',express.static('./views/')); /* 配置使用 art-template 模板引擎,第一个参数表示,当渲染以 .art 结尾的文件的时候(也可以修改为其他后缀,如: .html ), 使用 art-template 模板引擎, express-art-template 是专门用来在 Express 中把art-template 整合到Express 中,原因在于 express-art-template 依赖了 art-template */ app.engine('html',require('express-art-template')); //挂载路由 app.use(router); app.listen(5000,function(){ console.log('Running server 5000.....'); })
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="/views/css/index.css" > <title>Index Page</title> </head> <body> <div id="MajorBody"> <div id ="Header"> <span class="ProjectName"> Student Admini System</span> <input type="text" value="" name ="" placeholder="Search..." class="Search" id="Search" > <span class="direct" id="DashBoard"> <a href="javascript:void(0)">DashBoard</a> </span> <span class="direct" id="Settings"> <a href="javascript:void(0)">Settings</a> </span> <span class="direct" id="Profile"> <a href="javascript:void(0)">Profile</a> </span> <span class="direct" id="Help"> <a href="javascript:void(0)">Help</a> </span> </div> <div id="navigator"> <ul id="Part"> <li> <a href="#">Overview</a> </li> <li> <a href="#">Overview</a> </li> <li> <a href="#">Overview</a> </li> <li> <a href="#">Overview</a> </li> </ul> <ul id="Part" class="Two"> <li> <a href="#">Overview</a> </li> <li> <a href="#">Overview</a> </li> <li> <a href="#">Overview</a> </li> <li> <a href="#">Overview</a> </li> </ul> <ul id="Part" class="Three"> <li> <a href="#">Overview</a> </li> <li> <a href="#">Overview</a> </li> <li> <a href="#">Overview</a> </li> <li> <a href="#">Overview</a> </li> </ul> </div> <div id="Board"> <div id="ProfileBoard"> <div class="ins"> <div class="image"> <img src="/views/img/猫咪投降.jpg" alt=""> </div> <span class = "Name">Cat</span> <span class = "introduction">Miao~Miao~</span> </div> <div class="ins"> <div class="image"> <img src="/views/img/小马嚎叫.jpg" alt=""> </div> <span class = "Name">Fang</span> <span class = "introduction">我很强,我知道</span> </div> <div class="ins"> <div class="image"> <img src="/views/img/李信.png" alt=""> </div> <span class = "Name">Xin</span> <span class = "introduction">不为不存在的天命而压低脊梁</span> </div> <div class="ins"> <div class="image"> <img src="/views/img/Yuyuan.jpg" alt=""> </div> <span class = "Name">Yuyuan</span> <span class = "introduction">今天吃啥?</span> </div> </div> <form action="" method="POST" id="ControlButton"> <!-- 表单元素要带name属性,才可以传输数据 --> <!-- 这里的formaction属性可以修改表单的action的值,ie-9以下版本不支持,水~ --> <button id="Add" type="submit" formaction="/add" > Add </button> <button id="Update" type = "submit" formaction="/update" > Update </button> <input placeholder="Please putin Sno" type="text" id="Sno" name="Sno" value="{{ Sno }}"> <input placeholder="Please putin Name" type="text" id="Name" name="Name" value="{{ Name }}"> <input placeholder="Please putin Age" type="text" id="Age" name="Age" value="{{ Age }}"> <input placeholder="Please putin Gender" type="text" id="Gender" name="Gender" value="{{ Gender }}"> <input placeholder="Please putin Hobbies" type="text" id="Hobbies" name="Hobbies" value="{{ Hobbies }}"> </form> <div id="InfoBoard"> <div class="Title"> <div class="Sno">Sno</div> <div class="SName">Name</div> <div class="SAge">Age</div> <div class="SGender">Gender</div> <div class="SHobbies">Hobbies</div> </div> <ul id="Info"> {{ each Students}} <li > <div class="Sno"> {{ $value.Sno }}</div> <div class="SName">{{ $value.Name }}</div> <div class="SAge">{{ $value.Age }}</div> <div class="SGender">{{ $value.Gender }} </div> <div class="SHobbies">{{ $value.Hobbies }} <a href="/edit?id={{ $value.Sno }} ">Edit</a> <a href="/delete?id={{ $value.Sno }}">Delete</a> </div> </li> {{ /each }} </ul> </div> </div> </div> </body> </html>
这篇关于Node-curd案例(Mongodb版本)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-04-01got an unexpected keyword argument
- 2024-03-30维多利亚的秘密 golang入坑系统
- 2024-03-29mongodb sort by date
- 2024-03-29go swagger
- 2024-03-25mongodb cdc
- 2024-03-25how to use go in vscode
- 2024-03-22mongooseserverselectionerror: connect econnrefused ::1:27017
- 2024-03-21pymongo insert_many
- 2024-03-18projection mongodb
- 2024-03-14clickhouse-go