# nodejs-crud **Repository Path**: bingohello/nodejs-crud ## Basic Information - **Project Name**: nodejs-crud - **Description**: 一个简单的增删改查demo - **Primary Language**: NodeJS - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-03-15 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 基于Express4.x的增删改查应用 ## 1.项目搭建 ![](https://i.imgur.com/MMkwslL.png) ### 1.1 初始化package.json文件 > 在项目根目录下执行如下命令 npm init 所有配置项默认,一直按“Enter”键即可。 完成初始化,此时在项目根目录下生成package.json文件。 ### 1.2 安装express模块支持 > 在项目根目录下执行如下命令 npm install express 完成安装后,在根目录下生成node_modules文件夹,表示之后可以在项目中调用express模块的功能。 ### 1.3 创建第一个完整应用 > 在项目根目录下新建app.js文件 'use strict'; var express = require('express'); var app = express(); app.listen(3000); > 执行 node app.js 命令启动第一个服务,执行完后控制台处于等待状态(这里不报错就表示成功)。 ### 1.4 设置IDEA的ES6支持 File-->Settings-->Languages&Frameworks-->JavaScript 修改选项JavaScript language version为ECMAScript 6 ![](https://i.imgur.com/AZ3auc4.png) ## 2. 具体功能实现 ### 2.1 连接json数据 > 新建data.json //data.json [{"name":"zhaozb"}] > 新建db.js //db.js 'use strict'; const repos = require('./data'); const fs = require('fs'); module.exports = { store(){ fs.writeFileSync(__dirname+'/data.json', JSON.stringify(repos)); }, get(index){ return repos[index]; }, list(){ return repos; }, add(name){ repos.push(name); this.store(); }, del(index){ repos.splice(index, 1, newName); this.store(); }, update(index, newName){ repos.splice(index, 1, newName); this.store(); } } > 修改app.js引入db.js依赖并创建一个路由 'use strict'; const express = require('express'); const app = express(); const db = require('./db'); app.get('/', function (req, res) { res.send(db.list()); }) app.listen(3000); > 重启node服务,http://localhost:3000查看结果(data.json的数据通过路由返回到网页上) ### 2.2 完善列表功能 > 新建views文件夹 > 在views下新建index.ejs文件 //index.ejs <%= title%> > 修改app.js,增加ejs模板引擎支持 'use strict'; const express = require('express'); var path = require('path'); const app = express(); const db = require('./db'); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.get('/', function (req, res) { res.render('index', {title: 'Express'}); //向index.ejs的页面返回一个title变量,值为Express }) app.listen(3000); 重启node服务,查看网页标题变为Express,说明项目成功支持ejs > 修改index.ejs > 修改app.js 'use strict'; //采用严格模式,支持ES6语法 const express = require('express'); var path = require('path'); const app = express(); const db = require('./db'); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.get('/', function (req, res) { res.render('index', {list: db.list()}); }) app.listen(3000); 重启node服务,重新刷新页面 ![](https://i.imgur.com/kf9R08W.png) ### 2.3 添加功能 > 在app.js中增加新增路由,与json解析支持 npm install body-parser app.js 'use strict'; //采用严格模式,支持ES6语法 const express = require('express'); var path = require('path'); var bodyParser = require('body-parser'); const app = express(); const db = require('./db'); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.get('/', function (req, res) { res.render('index', {list: db.list()}); }); app.post('/add', function (req, res) { console.log(req); db.add({name: req.body.name}); res.redirect('/'); }) app.listen(3000); > 在页面中增加新增功能(新增按钮+表单弹窗) 添加
操作测试 ![](https://i.imgur.com/4ZLa3ey.png) ![](https://i.imgur.com/YeARj5c.png) ![](https://i.imgur.com/3L0mmTE.png) ### 2.4 删除功能 > 在app.js中增加删除路由 'use strict'; //采用严格模式,支持ES6语法 const express = require('express'); var path = require('path'); var bodyParser = require('body-parser'); const app = express(); const db = require('./db'); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.get('/', function (req, res) { res.render('index', {list: db.list()}); }); app.post('/add', function (req, res) { console.log(req); db.add({name: req.body.name}); res.redirect('/'); }); app.get('/del', function (req, res) { let index = req.query.index; db.del(index); res.redirect('/'); }) app.listen(3000); > 修改界面,增加删除按钮 添加
![](https://i.imgur.com/4xLFgLg.png) ### 2.5 修改功能 > 在app.js中增加根据索引获取数据的路由和修改的路由 'use strict'; //采用严格模式,支持ES6语法 const express = require('express'); var path = require('path'); var bodyParser = require('body-parser'); const app = express(); const db = require('./db'); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.get('/', function (req, res) { res.render('index', {list: db.list()}); }); app.post('/add', function (req, res) { console.log(req); db.add({name: req.body.name}); res.redirect('/'); }); app.get('/del', function (req, res) { let index = req.query.index; db.del(index); res.redirect('/'); }); app.post('/update', function (req, res) { var index = req.body.index; var name = req.body.name; db.update(index, {name}); res.redirect('/'); }); app.get('/get/:index', function (req, res) { var index = req.params.index; var name = db.get(index); res.send(name); }); app.listen(3000); > 调整界面,增加修改按钮,增加修改弹窗界面 添加
操作测试 ![](https://i.imgur.com/VM4uJae.png) ![](https://i.imgur.com/7oxR2Ag.png) ![](https://i.imgur.com/pIgyKeh.png) ### 2.6 登陆功能 > 增加session支持 npm install express-session > 在app.js中引入session依赖,增加登陆路由 'use strict'; //采用严格模式,支持ES6语法 const express = require('express'); var path = require('path'); var bodyParser = require('body-parser'); var session = require('express-session'); const app = express(); const db = require('./db'); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(session({ secret: 'keyboard cat', resave: false, saveUninitialized: true })); app.get('/', function (req, res) { res.render('index', {list: db.list(), logined: req.session.logined}); }); app.post('/add', function (req, res) { console.log(req); db.add({name: req.body.name}); res.redirect('/'); }); app.get('/del', function (req, res) { let index = req.query.index; db.del(index); res.redirect('/'); }); app.post('/update', function (req, res) { var index = req.body.index; var name = req.body.name; db.update(index, {name}); res.redirect('/'); }); app.get('/get/:index', function (req, res) { var index = req.params.index; var name = db.get(index); res.send(name); }); app.post('/login', function (req, res) { let loginname = req.body.loginname; let password = req.body.password; if(loginname === 'qishon' && password === '123456'){ req.session.logined = true; res.send("success"); }else{ res.send("error"); } }); app.listen(3000); > 修改界面,增加登陆按钮,增加登陆弹窗,及权限控制 <%if(logined){%> 添加   <%}else{%> 登陆 <%}%>
操作测试 ![](https://i.imgur.com/llynx3G.png) ![](https://i.imgur.com/Y1K1Esx.png) ![](https://i.imgur.com/W1mF9DX.png) ### 2.6 退出功能 > 在app.js中增加退出路由 'use strict'; //采用严格模式,支持ES6语法 const express = require('express'); var path = require('path'); var bodyParser = require('body-parser'); var session = require('express-session'); const app = express(); const db = require('./db'); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(session({ secret: 'keyboard cat', resave: false, saveUninitialized: true })); app.get('/', function (req, res) { res.render('index', {list: db.list(), logined: req.session.logined}); }); app.post('/add', function (req, res) { console.log(req); db.add({name: req.body.name}); res.redirect('/'); }); app.get('/del', function (req, res) { let index = req.query.index; db.del(index); res.redirect('/'); }); app.post('/update', function (req, res) { var index = req.body.index; var name = req.body.name; db.update(index, {name}); res.redirect('/'); }); app.get('/get/:index', function (req, res) { var index = req.params.index; var name = db.get(index); res.send(name); }); app.post('/login', function (req, res) { let loginname = req.body.loginname; let password = req.body.password; if(loginname === 'qishon' && password === '123456'){ req.session.logined = true; res.send("success"); }else{ res.send("error"); } }); app.get('/logout', function (req, res) { req.session.logined = false; res.redirect('/'); }); app.listen(3000); > 修改界面,增加退出按钮 <%if(logined){%> 添加   退出 <%}else{%> 登陆 <%}%>
操作测试 ![](https://i.imgur.com/e3eUE2u.png) ![](https://i.imgur.com/3dNJvxi.png)