Node.js(五)学生管理CRUD
npm init -y(初始化项目)
npm install express(引入express)
npx express-generator -e(自动生成模板。添加对 ejs 模板引擎的支持)
npm i --save lodash(引入lodash)
app.js
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
//获取路由
var indexRouter = require('./routes/index');//模板自带
var usersRouter = require('./routes/users');//模板自带
var studentRouter = require('./routes/student');
var app = express();
// view engine setup //获取视图路径,_dirname是lodash里的获取文件目录
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
//绑定路由
app.use('/index', indexRouter);
app.use('/users', usersRouter);
app.use('/', studentRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
student.js
var express = require('express');
var router = express.Router();
const _=require("lodash");
let stus=[
{id:202201,name:"tom",age:18},
{id:202202,name:"rose",age:16},
{id:202203,name:"jack",age:20},
{id:202204,name:"lili",age:15},
{id:202205,name:"lucy",age:15}
];
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('student', {stus,msg: '',stu:{id:"",name:"",age:""}});
});
router.get('/delete/:id', function(req, res, next) {
//查找选中id的索引
let index=_.findIndex(stus,{id:req.params.id})
//删除
stus.splice(index,1);
res.render('student', {stus,msg: '删除成功!',stu:{id:"",name:"",age:""}});
});
//添加
router.post('/add', function(req, res, next) {
//查找选中id的索引
let stu=req.body;
stus.push(stu);
//根据编号排序
let stus2=_.orderBy(stus,["id"]);
stu.id=_.last(stus2).id+1;
res.render('student', {stus,msg: '添加成功',stu:{id:"",name:"",age:""}});
});
//修改
router.get('/edit/:id', function(req, res, next) {
//查找选中id的索引
let stu=_.find(stus,{id:parseInt(req.params.id)})
console.log(stus);
res.render('student', {stus,msg: '',stu});
});
//更新
router.post('/update', function(req, res, next) {
//查找选中id的索引
let stuSubmit=req.body;
let stu=_.find(stus,{id:parseInt(stuSubmit.id)})
stu.name=stuSubmit.name;
stu.age=stuSubmit.age;
//重新渲染页面
res.render('student', {stus,msg: '更新成功',stu:{id:"",name:"",age:""}});
});
module.exports = router;
student.ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>学生管理系统</title>
</head>
<body>
<h1>学生管理系统</h1>
<table width="100%" border="1">
<tr>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>操作</th>
</tr>
<% for(let i=0;i<stus.length;i++){ %>
<tr>
<td><%=stus[i].id%></td>
<td><%=stus[i].name%></td>
<td><%=stus[i].age%></td>
<td>
<a href="/delete/<%=stus[i].id%>" class="del">删除</a>
<a href="/edit/<%=stus[i].id%>">修改</a>
</td>
</tr>
<%} %>
</table>
<fieldset>
<legend>添加学生</legend>
<form method="post">
<p>
<label>姓名:</label>
<input type="text" name="name" value="<%=stu.name%>">
</p>
<p>
<label>年龄:</label>
<input type="text" name="age" value="<%=stu.age%>">
</p>
<input type="hidden" name="id" id="studentId" value="<%=stu.id%>">
<button formaction="/add">添加</button>
<button formaction="/update">更新</button>
</form>
</fieldset> <h4><%=msg%></h4> <script>
let dels=document.querySelectorAll(".del");
for(let i=0;i<dels.length;i++){
dels[i].onclick=function(){
return confirm("您确定要删除吗?");
}
}
</script>
</body>
</html>
Node.js(五)学生管理CRUD的更多相关文章
- 4.Node.js 微信消息管理
一.写在前面的话 当用户发送消息给公众号时(或某些特定的用户操作引发的事件推送时),会产生一个POST请求,开发者可以在响应包(Get)中返回特定XML结构,来对该消息进行响应. 消息推送也是 ...
- Node.js的安装以及Node.js的模块管理
索引: Node.js的安装以及Node.js的模块管理Node.js开发环境搭建以及对ES6的支持Node.js构建Vue.js项目Vue.js单文件组件的开发基于Vue.js的UI组件(Eleme ...
- Node.js的进程管理
众所周知Node基于V8,而在V8中JavaScript是单线程运行的,这里的单线程不是指Node启动的时候就只有一个线程,而是说运行JavaScript代码是在单线程上,Node还有其他线程,比如进 ...
- 使用yarn代替npm作为node.js的模块管理器
使用yarn代替npm作为node.js的模块管理器 转 https://www.jianshu.com/p/bfe96f89da0e Fast, reliable, and secure d ...
- 90%的人都不知道的Node.js 依赖关系管理(下)
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://dzone.com/articles/node-dependency-manage ...
- Node.js 安装与管理
一.node安装 Windows下,官网下载 Node.js 安装包,运行安装即可, 安装成功后,可查看版本号 node -v 二.npm npm 是 node 包管理工具,随同node一起安装,安装 ...
- 90%的人都不知道的Node.js 依赖关系管理(上)
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文参考:https://dzone.com/articles/nodejs-dependency-mana ...
- 关于node.js的进程管理
如果是单纯的运行一个node进程,那会比较简单,例如: node ./example.js 但是一般来说,当我们运行一个node进程之后,我们可能希望对这个进程进行更多的管理,例如,当node程序是一 ...
- [Web 前端] 使用yarn代替npm作为node.js的模块管理器
cp from : https://www.jianshu.com/p/bfe96f89da0e Fast, reliable, and secure dependency managemen ...
随机推荐
- 基于ABP实现DDD--领域逻辑和应用逻辑
本文主要介绍了多应用层的问题,包括原因和实现.通过理解介绍了如何区分领域逻辑和应用逻辑,哪些是正确的实践,哪些是不推荐的或者错误的实践. 一.多应用层的问题 1.多应用层介绍 不知道你们是否会 ...
- JavaWeb--基本概念、Web服务器与Tomcat
前言 Java Web 其实就是一个技术的总和,把Web看成一个容器而已主要使用JavaEE技术来实现.在加上各种中间件. 整个javaWeb阶段的内容通过实际的案例贯穿学习, 所涉及到的技术知识点会 ...
- Vue3.0工程创建 && setup、ref、reactive函数 && Vue3.0响应式实现原理
1 # 一.创建Vue3.0工程 2 # 1.使用vue-cli创建 3 # 官方文档: https://cli.vuejs.org/zh/guide/creating-a-project.html# ...
- 参考MySQL Internals手册,使用Golang写一个简单解析binlog的程序
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. MySQL作为最流行的开源关系型数据库,有大量的拥趸.其生态已经相当完善,各项特性在圈内都有大量研究.每次新特性发布,都会 ...
- Luogu3855 [TJOI2008]Binary Land (BFS)
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...
- Java SE 16 新增特性
Java SE 16 新增特性 作者:Grey 原文地址:Java SE 16 新增特性 源码 源仓库: Github:java_new_features 镜像仓库: GitCode:java_new ...
- ss 显示unix 域 的socket 缓冲区不正确
一个unix 域socket,平时我们用ss -auxp 来查看是否有数据在内核没有到用户态, [root@localhost unix]# ss -auxp |grep -i server.o u_ ...
- mybatisplus使用xml
一.配置xml路径 mybatis-plus: mapper-locations: classpath:mapper/*.xml 二.编写Mapper里面的方法 public interface Us ...
- [HDU3976]Electric resistance(电阻)(信竞&物竞)(高斯消元)
题面 Problem Description Now give you a circuit who has n nodes (marked from 1 to n) , please tell abc ...
- 「题解报告」 P3167 [CQOI2014]通配符匹配
「题解报告」 P3167 [CQOI2014]通配符匹配 思路 *和?显然无法直接匹配,但是可以发现「通配符个数不超过 \(10\) 」,那么我们可以考虑分段匹配. 我们首先把原字符串分成多个以一个通 ...