# CRUD-express **Repository Path**: zxinc/CRUD-express ## Basic Information - **Project Name**: CRUD-express - **Description**: 学生信息管理--express---文件保存 - **Primary Language**: NodeJS - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 2 - **Created**: 2019-02-01 - **Last Updated**: 2022-08-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Express - crud #### -(信息管理小系统)----node.js ## 起步 - 初始化 - 模板处理 - 需掌握技术: - express--(node.js框架) - art-template 模板引擎(express-art-template) - body-parser --解析表单post请求体 - 应熟练运用 - fs文件操作模块 - 模板引擎 - 回调函数(callback)---要多写代码巩固经验---思维训练 ## 路由设计 | 请求方法 | 请求路径 | get参数 | post参数 | b备注 | | :------: | :-------------: | :-----: | :------------------------: | :--------------: | | GET | /students | | | 渲染首页 | | GET | /students/new | | | 添加学生信息 | | POST | /students/new | | name,gender,hobbies,fruits | 处理添加学生请求 | | GET | /students/edit | id | | 渲染编辑页面 | | POST | /student/edit | | id,gender,hobbies,fruits | 编辑请求 | | GET | /student/delete | id | | 删除请求 | ## 入口模块 app.js ~~~javascript /* * app.js入口模块 * --启动服务 * --做一些服务相关的配置 * --模板引擎 * --body-parser -解析表单post请求体 * --提供静态资源服务 * --挂在路由--app.use(router) * --监听端口号启动服务 * */ let express= require('express') let router=require('./router') //第三方插件----解析路径 let bodyParser = require('body-parser') let app=express() //公开资源 app.use(express.static('public')) app.use(express.static('node_modules')) app.engine('html',require('express-art-template')) // parse application/x-www-form-urlencoded app.use(bodyParser.urlencoded({ extended: false })) // parse application/json app.use(bodyParser.json()) //把路由容器挂载到app服务中 app.use(router) app.listen(3000,function () { console.log('app is running!') }) ~~~ ## 提取路由模块 router.js ```javascript /* - 路由模块 - */ let express=require('express') let router=express.Router() let fs=require('fs') router.get('/',function (req,res) { }) router.get('/students',function (req,res) { }) router.get('/students/new',function (req,res) { }) router.post('/students/new',function (req,res) { }) router.get('/edit',function (req,res) { }) router.post('/edit',function (req,res) { }) router.get('/delete',function (req,res) { }) //导出router module.exports=router ``` ## 业务模块 students.js----**node.js精华之所在** ~~~javascript /* * 操作文件数据 * 只处理数据,不关心业务 * */ let fs = require('fs') let dbPath = './db.json' //查询文件里面的数据 exports.find = function (callback) { fs.readFile(dbPath, 'utf-8', function (err, data) { if (err) { return callback(err) } callback(null, JSON.parse(data).students) }) } //通过id查询数据 exports.findById = function (id, callback) { fs.readFile(dbPath, 'utf-8', function (err, data) { if (err) { return callback(err) } let students = JSON.parse(data).students let ret = students.find(function (item) { return item.id === parseInt(id) }) callback(null, ret) }) } //保存数据至文件 exports.save = function (student, callback) { //读取文件数据 fs.readFile(dbPath, 'utf-8', function (err, data) { if (err) { return callback(err) } let students = JSON.parse(data).students student.id = students[students.length - 1].id + 1 students.push(student) //把对象数据转成字符串 let fileDate = JSON.stringify({ students: students }) //将数据保存至文件 fs.writeFile(dbPath, fileDate, function (err) { if (err) { return callback(err) } callback(null) }) }) } // 更新学生信息(通过id) exports.undataById = function (student, callback) { //读取文件数据 fs.readFile(dbPath, 'utf-8', function (err, data) { if (err) { return callback(err) } let students = JSON.parse(data).students student.id = parseInt(student.id) //修改数据(根据id查找) // ecmaScript6数组方法----find let stu = students.find(function (item) { return item.id === student.id }) for (let key in student) { stu[key] = student[key] } //把对象数据转成字符串 let fileDate = JSON.stringify({ students: students }) //将数据保存至文件 fs.writeFile(dbPath, fileDate, function (err) { if (err) { return callback(err) } callback(null) }) }) } //删除学生信息 exports.deleteById = function (id, callback) { fs.readFile(dbPath, 'utf-8', function (err, data) { if (err) { return callback(err) } let students = JSON.parse(data).students let deleteid = students.findIndex(function (item) { return item.id === parseInt(id) }) students.splice(deleteid, 1) //把对象数据转成字符串 let fileDate = JSON.stringify({ students: students }) //将数据保存至文件 fs.writeFile(dbPath, fileDate, function (err) { if (err) { return callback(err) } callback(null) }) }) } ~~~ 界面概览: ![1549352649860](C:\Users\ZC\AppData\Roaming\Typora\typora-user-images\1549352649860.png) ![1549352669788](C:\Users\ZC\AppData\Roaming\Typora\typora-user-images\1549352669788.png)