文章目录
- [1 checkLoginMiddleware.js](#1 checkLoginMiddleware.js)
- [2 auth.js](#2 auth.js)
- [3 app.js](#3 app.js)
- [4 设置公益404:404.ejs](#4 设置公益404:404.ejs)
1 checkLoginMiddleware.js
javascript
//检测登录的中间件
module.exports = (req, res, next) => {
//判断
if(!req.session.username){
return res.redirect('/login');
}
next();
}
2 auth.js
javascript
var express = require('express');
var router = express.Router();
//导入 用户的模型
const UserModel = require('../../models/UserModel');
const md5 = require('md5');
//注册
router.get('/reg', (req, res) => {
//响应 HTML 内容
res.render('auth/reg');
});
//注册用户
router.post('/reg', (req, res) => {
//做表单验证
//获取请求体的数据
UserModel.create({...req.body, password: md5(req.body.password)}, (err, data) => {
if(err){
res.status(500).send('注册失败, 请稍后再试~~');
return
}
res.render('success', {msg: '注册成功', url: '/login'});
})
});
//登录页面
router.get('/login', (req, res) => {
//响应 HTML 内容
res.render('auth/login');
});
//登录操作
router.post('/login', (req, res) => {
//获取用户名和密码
let {username, password} = req.body;
//查询数据库
UserModel.findOne({username: username, password: md5(password)}, (err, data) => {
//判断
if(err){
res.status(500).send('登录, 请稍后再试~~');
return
}
//判断 data
if(!data){
return res.send('账号或密码错误~~');
}
//写入session
req.session.username = data.username;
req.session._id = data._id;
//登录成功响应
res.render('success', {msg: '登录成功', url: '/account'});
})
});
//退出登录
router.post('/logout', (req, res) => {
//销毁 session
req.session.destroy(() => {
res.render('success', {msg: '退出成功', url: '/login'});
})
});
module.exports = router;
3 app.js
javascript
const authRouter = require('./routes/web/auth');
app.use('/', authRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
//响应 404
res.render('404');
});
4 设置公益404:404.ejs
html
<!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>404</title>
</head>
<body>
<script src="//volunteer.cdn-go.cn/404/latest/404.js"></script>
</body>
</html>