node.js+express实现简单的增删改查

主要用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).students
		var 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)
			}
			// 成功就没错,所以错误对象是 null
			callback(null)
		})
	})
}


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吞掉星星的鲸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值