请选择 进入手机版 | 继续访问电脑版

express框架+mongodb简易学生管理

[复制链接]
暖男先生 发表于 2020-12-31 18:16:19 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
1、先创建数据库,再创建聚集,用到了数据库图形界面Robo 3T,数据聚集如下所示:


2、安装express脚手架

  1.         npm i express-generator -g  //在终端中输入
复制代码
3、创建项目

  1.         express stuSystem //执行完成之后根据提示执行以下内容:        cd stuSystem   //进入stuSystem这个目录        npm install   //安装相关的依赖包        npm start     //服务器运行开始
复制代码
4、在欣赏器中输入http://localhost:3000/,结果如下:


5、举行完第4步,就搭建好了项目,项目标目录布局如下:

  1.         - app.js:入口文件        - bin:二进制目录        - node_modules:依赖包        - package.json:依赖包的记录文件        - public:静态目录        - routes:路由        - views:页面模板
复制代码
6、现在开始创建学生管理系统相关的文件:



  • 在public文件夹下创建一个index.html文件 (public是专门用来管理静态资源的,在public下创建index.html,express就会自动访问到它),服务器一启动就运行。
  • 在routes路由这个文件夹建stu.js文件,用于接收前端ajax请求,以及返反响应数据
  • 修改app.js文件的有关内容(app.js文件是生成项目就有的)
  1.         var stuRouter = require('./routes/stu');//在路由这个文件夹下面创建了stu.js文件,在这里通过require()引入这个文件,界说一个stuRouter变量来得到        app.use('/stu', stuRouter); //注册中间件stuRouter
复制代码


  • 在目录中创建Service文件夹,创建stuService.js文件
  • 在目录中创建Dao文件夹,创建stuDao.js文件、db.js文件以及Model文件夹,再在Model下创建stuModel.js文件
整体文件如下:

7、上面先容了项目大要的文件,接下来是详细的内容,详细的内容涉及到两个知识点:



  • Restful(体现层状态转移)

    • Restful就是规范url,url自己就是标志资源的,不应该标志这个资源要做什么,例如下面两条url都是标志删除资源的使用
    1.   http://abc.com/?method=comment.del&id=XXX  http://abc.com/comment/del/xxx
    复制代码
      

    • 所以应该使用 http差异的请求方式来表达要对一个资源做什么事情:
    1.   - 新增:【POST】http://abc.com/comment  - 查询:【GET】http://abc.com/comment/x  - 删除:【DELETE】http://abc.com/comment/x  - 修改:【PUT】http://abc.com/comment/x
    复制代码

  • 三层架构

    • 体现层: 主要对用户的请求继承,以及数据的返回,为客户端提供应用步伐的访问。
    • 业务逻辑层: 主要负责对数据层的使用。也就是说把一些数据层的使用举行组合。
    • 数据访问层: 主要看数据层内里有没有包罗逻辑处置惩罚,实际上它的各个函数主要完成各个对数据文件的使用。而不必管其他使用。
    • 详细的实现就是目录表中对应的文件夹:
    1.   - routes:体现层  - service:业务层  - dao:持久层
    复制代码


8、详细文件内容:

index.html
  1. //这是html部分                [size=6]学生管理系统[/size]
  2.                                                 姓名:                           
  3.                                         年岁:                           
  4.                                         性别:                男                女            
  5.                                         分数:                           
  6.                                                                     
  7.                 [size=5]学生信息表[/size]
  8.         [table][/table]   
  9.    
复制代码
  1. //javascript部分                
复制代码
stu.js
  1. // 体现层//在这里就用到了Restful(体现层状态转移)var express = require('express');var router = express.Router();const {findStuService,addStuService,findOneStuService,delStuService,editStuService} = require('../Service/stuService');router.get('/', async function (req, res, next) {  res.send(await findStuService());});// 增加学生router.post('/', async function (req, res, next) {  res.send(await addStuService(req.body));});// 获取一个学生信息router.get('/findOneStu', async function (req, res, next) {  res.send(await findOneStuService(req.query.id));});// 删除学生信息router.delete('/', async function (req, res, next) {  res.send(await delStuService(req.body.id));});// 修改学生信息router.put('/', async function (req, res, next) {  console.log(req.body);  res.send(await editStuService(req.body));});module.exports = router;        
复制代码
stuService.js
  1. // 这一层就是业务层const urlencode = require('urlencode');const {findStuDao,addStuDao,findOneStuDao,delStuDao,editStuDao} = require('../Dao/stuDao');// 查找所有举行渲染表格module.exports.findStuService = async function(){    console.log(findStuDao,'func')    return await findStuDao()}// 增加学生module.exports.addStuService = async function(newStu){    return await addStuDao(newStu)}// 获取一个学生信息module.exports.findOneStuService = async function(id){    return await findOneStuDao(id);}// 删除学生信息module.exports.delStuService = async function(id){    return await delStuDao(id);}// 修改学生信息module.exports.editStuService = async function(stu){    // 'name=%E5%90%8E%E5%A4%A9&age=44&gender=%E7%94%B7&score=34'    let stuInfo=urlencode.decode(stu.info).split('&').map(item=>{        return item.split('=');    });    let data={};    for(let i of stuInfo){        data[i[0]]=i[1];  //键=值    }    data.id=stu.id;    return await editStuDao(data);}       
复制代码
stuDao.js
  1. //持久层const stuModel = require('./Model/stuModel');// 查找所有举行渲染表格module.exports.findStuDao = async function () {    return await stuModel.find();}// 增加学生module.exports.addStuDao = async function (newStu) {    console.log(newStu);    return await stuModel.create(newStu);}// 获取一个学生信息module.exports.findOneStuDao = async function (id) {    return await stuModel.find({_id : id});}// 删除学生信息module.exports.delStuDao = async function (id) {    return await stuModel.deleteOne({_id : id}); }// 修改学生信息module.exports.editStuDao = async function(stu){    // {"name":"xiejie"},{"name" : "谢杰"}    console.log(stu);    return await stuModel.updateOne({_id : stu.id},stu);}       
复制代码
stuModel.js
  1. // stuModel.js是数据模子文件require('../db.js')const mongoose = require('mongoose');// 1. 创建 Schema,Schema 就是我们数据模子的骨架// 在创建 Schema,就需要和聚集(表)举行对应const stuSchema = new mongoose.Schema({    name: String,    age: Number,    gender: String,    score:Number},{versionKey:false});// 2. 根据上面创建的 Schema 来生成数据模子// (1) model 的名字 (2)界说的 Schema (3)和数据库的哪个聚集关联mongoose.model('stuModel', stuSchema, 'student');//相对应的聚集// 3. 将这个模子导出去,背面所有的使用(增删改查)都是基于这个模子module.exports = mongoose.model('stuModel');
复制代码
db.js
  1. // 这个文件负责书写毗连数据库的相关设置const mongoose = require('mongoose');const dbURI = 'mongodb://localhost/students'; // 设置要毗连的数据库mongoose.connect(dbURI,{useNewUrlParser : true, useUnifiedTopology : true});mongoose.connection.on('connected',()=>{    console.log('数据库已经毗连...');})
复制代码
9、最后效果如下:



来源:https://blog.csdn.net/weixin_43741547/article/details/111939553
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )