主要用node.js和express实现数据的增删改查

一:安装包

需要的包如图所示:

 "dependencies": {"art-template": "^4.13.2","bootstrap": "^5.1.3","express": "^4.18.1","express-art-template": "^1.0.1"}

二:项目文件

三:项目文件具体内容

1.public公共文件

源码:https://gitee.com/shao-mu/node-js-express/tree/master/crud-node/public

2.views可视化文件

源码:https://gitee.com/shao-mu/node-js-express/tree/master/crud-node/views

3.app.js

//1、导包
var express = require('express')//路由5、导入router文件
var router  = require('./router')var fs = require('fs')
//2、创建服务
var app = express()//配置模板引擎
app.engine( 'html' , require ( 'express-art-template' ));
//开放静态资源
app.use('/public/',express.static('./public/'))
app.use('/node_modules/',express.static('./node_modules/'))
//配置body-parser
//parse application/x-www-form-urlencoded
app.use(express.urlencoded({ extended: false }))
// parse application/json
app.use(express.json())//路由6、把路由挂载到app中
app.use(router)//4、监听端口
app.listen(80,function(){console.log('run http://127.0.0.1')
})

4.db.json 数据信息可以自行编辑

{"students":[{"id":1,"name":"赵云","zi":"子龙","age":"30","gender":1,"like":"骑马"},{"id":2,"name":"黄忠","zi":"汉升","age":"60","gender":1,"like":"射箭"},{"id":3,"name":"马超","zi":"孟起","age":"40","gender":1,"like":"跑"},{"name":"蒋丞","zi":"丞儿","gender":"1","age":"20","like":"学习","id":5},{"name":"曹操","zi":"曹操","gender":"1","age":"40","like":"打架","id":6}]}

5.router.js

/*** 路由文件,业务文件,处理事务!!  业务员* 职责:只关心业务  不做具体的数据处理!!*///路由1、导入express框架
var express = require('express')//导入student文件
var Student = require('./student')//路由2、使用框架中的router容器
var router = express.Router()
var fs = require('fs')
var comments = [{name: '刘备',zi: '玄德',img: '../public/img/liubei.jpg'}, {name: '关羽',zi: '云长',img: '../public/img/guanyu.jpg'}, {name: '张飞',zi: '翼德',img: '../public/img/zhangfei.jpg'
}]//路由3、把所有的业务挂载到router容器中
//查询所有学生信息
router.get('/students', function(req, res) {//调用student.find方法Student.find(function(err,students){//没数据的话if(err){return resp.status(500).send('server error!!')}//有数据的话res.render('index.html',{comments,students})})
})//添加学生信息----页面渲染
router.get('/students/new', function(req, res) {res.render('new.html')
})//添加学生信息----业务处理
router.post('/students/new', function(req, res) {console.log('执行form表单提交事务处理...')//1、接收请求数据console.log(req.body)//2、处理数据//将post提交来的数据保存到db.json文件中Student.save(req.body,function(err){if(err){//3、响应结果return res.status(500).send('server error!!')}//3、响应结果  重定向(get请求) 跳转到首页res.redirect('/students')})
})//修改学生信息----页面渲染
router.get('/students/edit', function(req, res) {var id = parseInt(req.query.id)Student.findById(id,function(err,student){if(err){//3、响应结果return res.status(500).send('server error!!')}//3、响应结果  重定向到页面// resp.redirect('edit.html')res.render('edit.html',{student})})})//修改学生信息----业务处理
router.post('/students/edit', function(req, res) {//1、获取客户端发送来的请求数据  req.body//2、处理数据//调用student中的方法Student.updateById(req.body, function (err) {if (err) {return res.status(500).send('server error!!')}//3、响应结果  重定向(get请求) 跳转到首页res.redirect('/students')})
})//删除学生信息----业务处理
router.get('/students/delete', function(req, res) {Student.deleteById(req.query.id, function (err) {if (err) {res.status(500).send('Server error')}res.redirect('/students')})
})//路由4、把router导出
module.exports = router

6.students.js

/*** 数据操作文件模块   车间* 职责:进行文件中的数据处理,只做数据处理,不关心业务* 该处才是咱们程序员主要负责的部分* 在该模块中设计不同业务处理方法* 只作为被业务调用* 这些方法需要被暴露出来*/
var fs = require('fs')
var dbPath = './db.json'
/*** 获取所有学生列表* 设置成具有回调函数的方法* ajax  jquery* 回调的意义:在操作处,将各种情况都处理,在调用出进行判断处理* callback 两个参数*      第一个参数:err*               成功  null*               错误  错误信息*       第二个参数  data*                成功  data数据*                 错误  undefined*/
exports.find = function(callback){//异步方法fs.readFile(dbPath,'utf-8',function(err,data){if(err){return callback}callback(null,JSON.parse(data).students)//数组})
}/*** 根据id获取学生的所有信息* @param {Number} id   学生id* @param {function} callback    回调函数*/
exports.findById = function(id,callback){fs.readFile(dbPath,'utf-8',function(err,data){if(err){return callback(err)}var students = JSON.parse(data).studentsvar ret = students.find(function(item){return item.id === parseInt(id)})callback(null,ret)})
}/*** 添加学生* @param {Object} student  学生信息* @param {Object} callback  回调函数*/
exports.save = function(student,callback){fs.readFile(dbPath,'utf-8',function(err,data){if(err){return callback(err)}var students = JSON.parse(data).students//添加id   0  1  2           3    4 student.id = students[students.length - 1].id +1//保存对象到数组students.push(student)//把对象数据转换成字符串形式var fileData = JSON.stringify({students})//将fileData写入到db.json中fs.writeFile(dbPath,fileData,function(err){if(err){return callback}callback(null)//成功  err为null})})
}/*** 修改学生*/
exports.updateById = function (student, callback) {fs.readFile(dbPath, 'utf-8', function (err, data) {if (err) {return callback(err)}//拿到学生数组信息var students = JSON.parse(data).students//find:es6操作数组的方法,通过ID来判断,用来查询满足条件的一条数据var stu = students.find(function (item) {return item.id == parseInt(student.id)})//将传来的对象中的数据拷贝到db.json的students中对应的对象中去//{ id: 1, name: '赵雷', zi: '子凤', age: '35', gender: 1, like: '骑马' }//{"id":1,"name":"赵雷","zi":"子凤","age":"35","gender":1,"like":"骑马"}for (var key in student) {stu[key] = student[key]}//把对象数据转换成字符串形式var fileData = JSON.stringify({students})//将fileData写入到db.json中fs.writeFile(dbPath, fileData, function (err) {if (err) {return callback(err)}callback(null)//成功  err为null})})
}/*** 删除学生*/exports.deleteById = function (id, callback) {fs.readFile(dbPath, 'utf8', function (err, data) {if (err) {return callback(err)}var students = JSON.parse(data).students// findIndex 方法专门用来根据条件查找元素的下标var deleteId = students.findIndex(function (item) {return item.id === parseInt(id)})// 根据下标从数组中删除对应的学生对象students.splice(deleteId, 1)// 把对象数据转换为字符串var fileData = JSON.stringify({students: students})// 把字符串保存到文件中fs.writeFile(dbPath, fileData, function (err) {if (err) {// 错误就是把错误对象传递给它return callback(err)}// 成功就没错,所以错误对象是 nullcallback(null)})})
}

项目源码:https://gitee.com/shao-mu/node-js-express

node.js+express实现简单的增删改查相关推荐

  1. Node.js+Express+MongoDB 实现学生增删改查

    前言 选用Node.js,Express,MongoDB来实现一个学生信息的增删改查. Express框架搭建服务器 art-template模板实现页面 MongoDB数据库 Mongoose操作数 ...

  2. node ajax crud,基于node.js和rethinkdb的CRUD(增删改查)Web服务

    基于node.js和rethinkdb的CRUD(增删改查)Web服务 这是一个简单的REST web服务演示案例源码,使用Node.JS和Express 和RethinkDB,后者持久化JSON数据 ...

  3. node.js中对 mysql 进行增删改查等操作和async,await处理

    要对mysql进行操作,我们需要安装一个mysql的库. 一.安装mysql库 npm install mysql --save 二.对mysql进行简单查询操作 const mysql = requ ...

  4. vue结合php增删改查实例,用vue.js写一个简单的增删改查

    Title tbody:empty:after { content: '没有找到'; } 姓名年龄操作 {{item.stuName}}{{item.age}}修改 删除 添加 var app = n ...

  5. 使用 NodeJS+Express+MySQL 实现简单的增删改查

    关于node.js暂时记录如下,以后有时间一定学习 文章来自简书,作者:sprint,2016-07 使用 Node.js + Express+MySQL 实现简单的增删改查 https://www. ...

  6. html单页面js完成表数据库自动生成带注释的java实体类和简单的增删改查sql

    支持Mysql和Oracle,mybatis和ibatis可选.功能主要还是字符串的拼凑完成的,把用把表信息复制过来或者增加后台,就可以生成简单的增删改查了 临时体验点这里 我也不知道地址什么时候失效 ...

  7. SpringMVC_实现简单的增删改查

    实现简单的增删改查 1:创建User的javabean package com.doaoao.bean; public class User {private String name;private ...

  8. salesforce 零基础学习(五十一)使用 Salesforce.com SOAP API 实现用户登录以及简单的增删改查(JAVA访问salesforce)...

    此篇请参看:https://resources.docs.salesforce.com/202/latest/en-us/sfdc/pdf/salesforce_developer_environme ...

  9. 实现简单的增删改查(Asp.Net MVC+Layui)

    实现简单的增删改查(Asp.Net MVC+Layui) 一.页面效果 二.前期准备 1.新建项目 2. 在项目中新建文件夹(设置mvc的雏形) 3.连接数据库(SqlServer) JdbcUtil ...

最新文章

  1. 每日程序C语言42-带头结点的尾插法创建链表
  2. SAP Spartacus SSR模式启用失败的一个原因:SSR rendering exceeded timeout
  3. json字符串生成C#实体类的工具
  4. 【Python基础入门系列】第10天:Python 类与对象
  5. cf两边黑屏怎么解决win10_关闭自动睡眠仍然睡眠?Win10过几分钟就会自动睡眠黑屏解决方法...
  6. 活动安排问题的 动态规划和贪心算法
  7. h5正则表达式_正则表达式需要5天才能运行。 因此,我构建了一个可以在15分钟内完成操作的工具。...
  8. war包怎么解压_微信猫和老鼠主题怎么搞?快来看
  9. java webengine_webview – JavaFX 8 WebEngine:如何从java到console.log()从java到System.out?
  10. php mysql日期区间_php – 3个日期范围之间的Mysql查询
  11. Paraview—提取任意截面数据
  12. 华为鸿蒙事件真相揭秘,鸿蒙咋来的?华为董事长揭秘
  13. 收集整理的ARM嵌入式linux开发入门视频教程
  14. uc保存网页html,UC浏览器怎么保存网页
  15. sklearn中的特征工程(过滤法、嵌入法和包装法)
  16. 《深入理解计算机系统》
  17. C++ 栈的括号匹配
  18. 基于MATLAB图像处理的硬币个数识别系统
  19. High performance server architecture(高性能服务器架构)
  20. SpringCloud 第十章 Hystrix断路器

热门文章

  1. (转)更换镜像rootvg卷组中的硬盘
  2. 实验二 创建显示系统进程的信息的proc模块
  3. 双11专栏 | 基于可微渲染模型的妆容解析技术
  4. python提取时间段日期_Python 获取起止日期段中的时间列表
  5. 详解 YARN的内存和CPU配置
  6. unicode UTF-8和GBK编码
  7. C++11:nullptr_t与nullptr的原理
  8. GitHub入门(5)团队协同工作
  9. 2023计算机毕业设计-个人博客文章管理系统springboot-JAVA.VUE(论文+开题报告+运行)
  10. 阿里云视频点播报错 InvalidVideo.NotFound : The video does not exist.