Node学习笔记:优化crud增删改查使用教程_优化小白教程

本篇文章结合前文《Node学习笔记 Mongodb和Mongoose》对 curd 示例 进行优化MongoDB 安装安装文件下载地址:[https://www.mongodb.com/download-center/community]Windows 平台安装 MongoDB:https://www.runoob.com/mongodb/mongodb-w

Node学习笔记:优化crud增删改查使用教程

本篇文章结合前文《Node学习笔记 Mongodb和Mongoose》对 curd 示例 进行优化

Node学习笔记:优化crud增删改查使用教程_优化小白教程

MongoDB 安装

安装文件下载地址:[https://www.mongodb.com/download-center/community]

Windows 平台安装 MongoDB:https://www.runoob.com/mongodb/mongodb-window-install.html

在安装过程中需要特别注意,需要将 Install MongoDB Compass 前默认的勾选取消

可以使用 mongod –version 命令查看 MongoDB 版本,若版本号输出正常则安装完毕

Mongoose 安装和配置

npm install mongoose

优化 student.js 文件

有了 Mongoose 的帮助可以极大的简化数据的增、删、改、查工作

首先,配置 Mongoose

var mongoose = require('mongoose'); // 引入 mongoose
mongoose.connect('mongodb://localhost/test'); // 通过 mongoose 连接 mongodb 数据库

其次,设计 Schema 数据结构

var mongoose = require('mongoose'); // 引入 mongoose
mongoose.connect('mongodb://localhost/test'); // 通过 mongoose 连接 mongodb 数据库

// 设计数据结构
var Schema = mongoose.Schema
var studentData = new Schema({ // 实例化 Schema
    name: { // 姓名
        type: String, // 数据类型 String
        required: true // 数据为必填项
    },
    gender: { // 性别
        type: Number, // 数据类型 Number
        default: 0, // 数据默认值
        enum: [0, 1] // 可枚举数据
    },
    age: { // 年龄
        type: Number // 数据类型 Number
    },
})

最后,导出 Student

module.exports= mongoose.model('Student', studentData)
// 将数据保存 Mongodb 数据库 Student 集合中
// 导出 Mongodb 数据

到此为止,student.js 优化完毕

优化 router.js 文件

对于 router.js 文件,我们只需要调用 mongoose 提供的增、删、改、查 API 既可

代码如下:

var Student = require('./student') // 引入 student.js (student 模块专职用于处理数据)

var express = require('express') // 引入 express
var router = express.Router() // 创建路由容器

// 将所有路由都挂在到 router 路由容器中
router.get('/', function (req, res) { // 渲染学生列表页面
	// .find() 用于从数据库中查询所有数据,接收一个函数参数
    // function (err, students) 接收两个参数,其一为错误信息,二为查询的数据 students
    Student.find(function (err, students) {
        if (err) { // 若路由跳转错误,则抛出 Server error,状态码 500
            return res.status(500).send('Server error.')
        }
        res.render('index.html', { // 响应返回学生列表页面
            students: students
        })
    })
})

router.get('/new', function (req, res) { // 渲染添加学生页面
    res.render('new.html')
})

router.post('/new', function (req, res) { // 处理添加学生
    // new Student(req.body) 新建一条数据
    // .save 用于将数据添加到数据库,接收一个函数参数
    // function (err) 参数用于接收错误信息
    new Student(req.body).save(function (err) {
        if (err) { // 若路由跳转错误,则抛出 Server error,状态码 500
            return res.status(500).send('Server error.')
        }
        res.redirect('/') // 页面重定向回首页
    })
})

router.get('/edit', function (req, res) { // 渲染编辑学生页面
    // .findById() 用于根据 id 查询一条数据,接收两个参数,其一为匹配数据,二为函数
    // function (err, student) 函数接收两个参数,其一为错误信息,二为查询数据结果
    // req.query.id.replace(/"/g, '') 为需查询的数据 id ,通过 .replace 将 id 字符串转化为数字类型
    Student.findById(req.query.id.replace(/"/g, ''), function (err, student) {
        if (err) { // 若路由跳转错误,则抛出 Server error,状态码 500
            return res.status(500).send('Server error.')
        }
        res.render('edit.html', { // 响应返回编辑学生页面
            student: student
        })
    })
})

router.post('/edit', function (req, res) { // 处理编辑学生
    // .findByIdAndUpdate() 用于根据 id 更新数据,接收三个参数,其一为匹配数据,二为需替换的数据,三为函数
    // function (err) 函数接收错误信息
    // req.body.id.replace(/"/g, '') 为需查询的数据 id ,通过 .replace 将 id 字符串转化为数字类型
    var id = req.body.id.replace(/"/g, '')
    Student.findByIdAndUpdate(id, req.body, function (err) {
        if (err) { // 若路由跳转错误,则抛出 Server error,状态码 500
            return res.status(500).send('Server error.')
        }
        res.redirect('/') // 页面重定向回首页
    })
})

router.get('/students/delete', function (req, res) { // 处理删除学生
    // .findByIdAndRemove() 用于根据 id 删除对应数据,接收两个参数,其一为匹配数据,二为函数
    // function (err) 函数接收错误信息
    // req.body.id.replace(/"/g, '') 为需查询的数据 id ,通过 .replace 将 id 字符串转化为数字类型
    var id = req.query.id.replace(/"/g, '')
    Student.findByIdAndRemove(id, function (err) {
        if (err) { // 若路由跳转错误,则抛出 Server error,状态码 500
            return res.status(500).send('Server error.')
        }
        res.redirect('/') // 页面重定向回首页
    })
})

module.exports = router // 导出 router

文章已同步我的个人博客:《Node学习笔记 优化crud增删改查》

海计划公众号
(0)
上一篇 2020/03/20 23:49
下一篇 2020/03/20 23:49

您可能感兴趣的内容

  • 教你应付一个很恶心却常见的需求(点击自身以外的区域关闭自己)使用攻略_需求使用指南

    做前端最难受的就是产品给的需求以及测试给的bug了,看待这个标题是不是有点蒙,这是什么需求,下面来解读下!需求需求:如下图,点击已保存按钮弹出已保存列表,当点击屏幕其他区域要关闭这个下拉框,是不是很简单加点东西,但是点击这个下拉框内部的区域不能关闭下拉框)(原谅我里面没写东西你就当有东西,给个机会噻!),是不是很常见,是不是很恶心!你们是怎么做的。 之前我见

    2020/03/23
  • Web 编程中的三大分歧入门基础_编程小白知识

    《The Great Divide》 是 Chris Coyier 在 2019 年 2 月撰写的一篇文章。该文试图解释最近在前端社区发生的现象:一方面,有些开发者非常精通 JavaScript;另一方面,有些开发者非常精通 HTML、CSS、可访问性和 Web 设计。尽管他们都称自己是“前端”开发者,但他们并不拥有相同的兴趣和技能。Chris 称:“他们之

    2020/03/26
  • closure-compiler指南教程_JavaScript检查器和优化器

    closure-compiler指南教程 GitHub:https://github.com/google/closure-compiler 简介描述:JavaScript检查器和…

    2020/03/11
  • nodejs中怎么调用python函数?小白帮助_python基础知识

    每种语言都有自己的优势,互相结合起来各取所长程序执行起来效率更高或者说哪种实现方式较简单就用哪个,nodejs是利用子进程来调用系统命令或者文件,NodeJS子进程提供了与系统交互的重要接口,其主要API有: 标准输入、标准输出及标准错误输出的接口。NodeJS 子进程提供了与系统交互的重要接口,其主要API有:标准输入、标准输出及标准错误输出的接口chil

    2020/03/24
  • angularjs-slider使用帮助_面向AngularJS的slider 指令实现

    angularjs-slider使用帮助 官方网址:http://angular-slider.github.io/angularjs-slider/ GitHub:https:/…

    2020/03/06
  • 微信小程序开发注意指南和优化实践菜鸟指南_小程序菜鸟知识

    前言转眼间已经参与过我厂好几个小程序的开发了,下面本妹子将开发中的那些注意点和各位小伙伴们分享下,妥妥的干货一枚。其中培训视频以上传到B站中,欢迎小伙伴们来围观评论^ ^ https://www.bilibili.com/video/av56083647一、WXML不要换行写,有空格不行微信开发者工具不会对代码进行trim操作,如果代码中换行,页面也直接换行

    2020/03/29
  • web前端js中ES6的规范写法菜鸟攻略_规范入门基础知识

    1、引号的使用,单引号’ ‘ 优先(如果不是引号嵌套,不要使用双引号) 正常情况:console.log(‘hello there’) ,双引号转码: $(“”) 2、空格的使用问题:(关键字后 符号后 排版 函数 赋值符号= )等a 函数的括号:function hello (name) {} 看 (参数)的

    2020/04/05
  • CSS层模型的应用菜鸟指南_模型使用帮助

    1、绝对定位(position: absolute) :如果想为元素设置层模型中的绝对定位,需要设置position:absolute(表示绝对定位),这条语句的作用将元素从文档流中拖出来(即不依赖与前面的一个DIV的位置可以独立设置位置),然后使用left、right、top、bottom属性相对于其具有定位属性(即top\right\bottom\lef

    2020/03/29
  • Js实现点击查看全文(类似今日头条、知乎日报效果)基础指南_js知识小白攻略

    这篇文章主要为大家详细介绍了原生JS+css仿QQ今日头条、知乎日报点击查看全文的效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下. 移动端demo需要设置过最大高度max-height,然后把超出部分隐藏。判断内容是否超出指定高度,超出就添加,”展开全文”的按钮。添加按钮点击事件,点击后展开全文。代码:

    2020/04/05
  • JavaScript 社区由一个库引发的“smoosh门”事件到底怎么回事?使用指南_库小白教程

    原文: #SmooshGate FAQ作者:Mathias Bynenssmoosh?!发生了什么?!一项名为 JavaScript 功能的提案 Array.prototype.flatten 证明与 Web 不兼容。在 Firefox Nightly 中发布该功能会导致至少一个受欢迎的网站中断。鉴于有问题的代码是广泛使用的 MooTools 库的一部分,很

    2020/04/05
  • JavaScript 的共享传递和按值传递入门指南_变量小白指南

    关于JavaScript如何将值传递给函数,在互联网上有很多误解和争论。大致认为,参数为原始数据类时使用按值传递,参数为数组、对象和函数等数据类型使用引用传递。按值传递 和 引用传递参数 主要区别简单可以说:按值传递:在函数里面改变传递的值不会影响到外面引用传递:在函数里面改变传递的值会影响到外面但答案是 JavaScript 对所有数据类型都使用按值传递。

    2020/03/30
  • 关于Data URLs svg图片显示出错和浏览器URL hash #使用指南_svg小白基础

    在使用生成的svg图作为标签是src值时,发现有部分浏览器显示异常,所以这里记录下,在中,Data URLs格式与显示情况如下://1. 部分浏览器不能正常显示
    data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" width="50" hei

    2020/03/30
  • google-access-helper小白帮助_谷歌访问助手破解版

    google-access-helper小白帮助 官方网址:http://www.ggfwzs.com GitHub:https://github.com/haotian-wang…

    2020/03/11
  • Jupyter菜鸟教程_在线交互计算笔记本

    Jupyter菜鸟教程 官方网址:http://jupyter.org/ 简介描述:在线交互计算笔记本 「Jupyter Notebook」是一个以网页的形式打开,可以在网页页面中…

    2020/03/10
  • Vue组件库搭建实践与探索入门百科_组件指南攻略

    在以前传统的前端页面开发方式时,存在协同困难,可复用性差的问题,导致开发和维护都不是一件简单的事。而组件化思想的提出,以及Vue、React等MV*框架的快速流行,让我们开始尝试用组件化的思想去开发。由于笔者最近在研究组件库的搭建,故撰文记之。前言组件化思想让我们把页面划分为一个个组件,组件内部维护自己的UI展示、交互逻辑,这样将可以大大提高代码的复用性以及

    2020/03/23
  • vue引用js文件的多种方式使用帮助_vue入门攻略

    1、vue-cli webpack全局引入jquery(1) 首先 npm install jquery –save (–save 的意思是将模块安装到项目目录下,并在package文件的dependencies节点写入依赖。)(2)在webpack.base.conf.js里加入var webpack = require(“webpack”)(3)在m

    2020/04/05