学生管理系统开发步骤
学生管理系统
1.开发背景
2.开发准备
3.开发步骤
3.1创建一个空文件夹,取名students-system
方式一:右键新建
方式二:命令行新建(提倡)
1 ##windows系统 2 md students-system ##mac/linux 3 mkdir students-system
3.2 初始化
npm init -y
执行结果:该文件夹下新增了一个package.json
3.4 在该目录下新建文件夹/文件
1 mkdir public views data router 2 3 ##mac/linux touch app.js ##windows cd.>app.js 4 5 cd public 6 mkdir css img js 7 8 cd ../views ##mac/linux 9 touch admin-login.html show-students.html ##windows 10 cd.>admin-login.html show-students.html 11 12 cd ../data ##mac/linux 13 touch admins.json students.json jurisdiction.json ##windows
cd.>admins.json students.json jurisdiction.json
3.4 安装包
npm i express express-art-template art-template bootstrap@3 jquery
3.5 编辑app.js
搭建基础框架
const express=require('express') const app=express() app.listen(3000,()=>console.log('app is running...'))
创建路由
在router文件夹下,新建index.js ,并引入至app.js
Index.js
1 const express=require('express') 2 3 4 const router=express.Router() 5 6 7 8 // 对 外 暴 露 router module.exports=router
app.js
1 const express=require('express') 2 3 const router=require('./router')//开发者自己创建的模块,必须以./或../开头const app=express() 4 //引入express-art-template用以解析html文件app.engine('html',require('express-art-template')) 5 6 //开放静态文件夹app.use('/public',express.static('public')) app.use('/node_modules',express.static('node_modules')) 7 8 //配置body-parser,现在高版本的body-parser直接内置在了express里 9 //必须配置body-parser,否则后端无法收到前端post来的信息express.use(express.urlencoded({extended:false})) express.use(express.json())
10 app.use(router)
11 app.listen(3000,()=>console.log('app is running...'))
3.6 编辑管理员登录界面
admin-login.html
自行搭建界面,要有登录表单区域
1 <h1> 2 欢迎登录 3 </h1> 4 5 <form class="form-horizontal" action="/admin-login" method="post"> 6 <div class="form-group"> 7 <label for="account" class="col-sm-2 control- label">Account</label> 8 <div class="col-sm-10"> 9 <input type="text" class="form-control" name="account" id="account" placeholder="Account"> 10 <p class="text-danger hidden" id="p1">账号格式不正确</p> 11 <p class="text-danger hidden" id="p2">该账号未注册</p> 12 </div> 13 14 </div> 15 <div class="form-group"> 16 <label for="password" class="col-sm-2 control- label">Password</label> 17 <div class="col-sm-10"> 18 <input type="password" class="form-control" name="password" id="password" placeholder="Password"> 19 </div> 20 </div> 21 <div class="form-group"> 22 <div class="col-sm-offset-2 col-sm-10"> 23 <div class="checkbox"> 24 <label> 25 <input type="checkbox" name="remember"> Remember 26 me 27 </label> 28 </div> 29 </div> 30 </div> 31 <div class="form-group"> 32 <div class="col-sm-offset-2 col-sm-10"> 33 <button type="submit" class="btn btn-default">Sign 34 in</button> 35 </div> 36 </div> 37 </form>
form表单中,action是地址,method是方法,这两个值要跟后端保持一致
当account失去焦点时,通过正则判断手机号格式是否正确,如果正确,则通过ajax向后台验证账 号是否已注册,这一步我们使用jQuery来实现。
1 const test_account = () => { 2 /*if(正则格式位数正确){ 3 发送此手机号给后端 4 后端进行验证(是否有此手机号) 如果有,加上hidden 5 如果没有,提示"该账号不存在" 6 }else{ 7 提示账号格式不正确 8 } 9 10 */ 11 //手机号的正则表达式 12 //附:正则验证网址 https://regexper.com/ 13 const reg_phone = /^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0- 9]|19[0-35-9])\d{8}$/ 14 //正则表达式.test(字符串),如果满足则返回true,不满足返回false 15 if (reg_phone.test($('#account').val())) { 16 $('#p1').addClass('hidden')//添加class名hidden,添加后该标签将消失 17 //通过get方法,向'/test-account'路径发送信息{account: $('#account').val()}, 18 //其返回值就是后面函数的参数data 19 $.get('/test-account', {account: $('#account').val()}, data => { if (data) { 20 //如果后端返回了数据,并且account为true,意为经后台验证,该账号是已注册账号 21 islogin.account = true 22 $('#p2').addClass('hidden') return 23 } 24 islogin.account = false 25 $('#p2').removeClass('hidden') 26 }) 27 return 28 } 29 $('#p1').removeClass('hidden') 30 $('#p2').addClass('hidden') islogin.account = false 31 } 32 $('#account').blur(test_account)//上面的函数,在失去焦点时调用
验证过账号是注册过的之后,才可以提交该表单给后台
后台根据前端传过来的账号,去数据表中查找对应的账户,如果找到, 则比较前端传来的密码和数据表中的密码是否一致,如果一致,
则允许登录,就把管理员查看学生信息 的界面渲染给前端,同时
还要发送相应的数据,包括账户信息(注意删除账户密码)、对应权限、所有学生信息(注意删除账户密码)。
如果不一致,则把登录界面重新渲染给前端
浙公网安备 33010602011771号