const express = require('express')
const fs = require('fs')
const router = express.Router()//router:路由,代表一种映射关系
//渲染管理员登录
router.get('/admin-login.html', (req, res) => {
if (req.session.admin) {
res.redirect('/admin-student-message.html')
return
}
res.render('admin-login.html')
})
//渲染管理员查看学生信息界面
router.get('/admin-student-message.html', (req, res) => {
const admin = req.session.admin
if (admin) {
delete admin.password//密码不能发送到前端
fs.readFile('./data/students-message.json', (error, data) => {
if (error)throw error
const result = {
//admin:admin,
admin,
studentsMessage: JSON.parse(data)
}
res.render('admin-student-message.html', {result})
})
// res.render('admin-student-message.html', {admin})
} else {
res.redirect('/admin-login.html')
}
})
//渲染管理员添加学生界面
router.get('/admin-add-message.html', (req, res) => {
const admin = req.session.admin
if (admin) {
delete admin.password//密码不能发送到前端
res.render('admin-add-student.html',{admin})
} else {
res.redirect('/admin-login.html')
}
})
/****************************狗东西的分割线***************************************************/
router.post('/admin-login', (req, res) => {//回调函数,callback
// console.log(req.body)
fs.readFile('data/administrator.json', function (error, data) {
if (error) throw error
// console.log(JSON.parse(data))
const administrator = JSON.parse(data).find(item => item.account == req.body.account)//不能用全等,数据类型不同
if (!administrator || !administrator.incumbency) {
const message = {warning: '账号不存在'}
res.render('admin-login-error.html', {message})
return
}
if (administrator.password == req.body.password) {
fs.readFile('data/permissions.json', (error, data) => {//异步操作
if (error) throw error
const permissions = JSON.parse(data)//超级,普通,学生
/*let result={
permission:permissions.admin
}
// result.permission = permissions.admin//普通管理员权限复制给result.permission
if (administrator.isSuperAdmin) {//如果是超级管理员,则把超级管理员权限也添加给result.permission
// console.log(permissions)
/!*for(let i=0;i<permissions.superAdmin.length;i++){
result.permission.push(permissions.superAdmin[i])
}*!/
/!*for(item of permissions.superAdmin){
result.permission.push(item)
}*!/
result.permission=result.permission.concat(permissions.superAdmin)
}*/
administrator.permission = administrator.isSuperAdmin ? permissions.admin.concat(permissions.superAdmin) : permissions.admin
// res.render('admin-student-message.html', {result})
console.log(administrator)
req.session.admin = administrator
res.redirect('/admin-student-message.html')//跳转到router.get('/admin-student-message.html')
})
} else {
const message = {warning: '账号或密码错误'}
res.render('admin-login-error.html', {message})
}
// if (aaa)
// res.send(true)
// }else{
res.send(Boolean(JSON.parse(data).find(item=>item.account==req.query.account)))
})
})
//处理管理员添加学生数据
router.get('/add-student',(req,res)=>{
console.log(req.query)
//验证,非常严格的验证,否则对数据库是一场巨大的灾难,一切输入皆不可信
const newStudent={...req.query}//es6对象解构赋值,把req.query中的属性都复制到newStudent
newStudent.password='123456'
fs.readFile('data/students-message.json',(error,data)=>{
if (error)throw error
const students=JSON.parse(data)
newStudent.id= String(Number(students[students.length-1].id)+1)
if (!Array.isArray(newStudent.hobbies)){
newStudent.hobbies=newStudent.hobbies.split(',')
}
console.log(newStudent)
students.push(newStudent)
console.log(students)
fs.writeFile('data/students-message.json',JSON.stringify(students),(error)=>{
if (error)throw error
res.redirect('/admin-student-message.html')
})
})
})
module.exports = router
/***********************************************/
const express = require('express')
const session = require('express-session')
const app = express()
//模块化开发
// const fs = require('fs')
const router = require('./router/index.js')
//程序员自开发的模块,必须以 ./ 或 ../ 开头
//node遇到非./或非../开头的模块,会自动到node_modules里面去找
//借助express-art-template才可以解析html文件
app.engine('html', require('express-art-template'))
//开放静态文件
app.use('/node_modules', express.static('./node_modules'))
app.use('/public', express.static('./public'))
//配置body-parser,之后才能用req.body接受前端post来的数据
app.use(express.urlencoded({extended: false}))
app.use(express.json())
app.use(session({
secret: 'abcdefghijk',//设置签名密钥,内容也可以任意填写
cookie: {maxAge: 5 * 60 * 1000},//设置cookie的过期时间,即5分钟后在登陆需要密码
resave: true,//强制保存,如果session没有被修改也要重新保存
rolling: true,//5min内进入过系统则重新计时
saveUninitialized:true
}))
app.use(router)
app.listen(3000, () => console.log('app is running...'))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!