【前端】NodeJS:记账本案例优化(会话控制)——登录、注册

文章目录

  • [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>
相关推荐
曹牧3 小时前
C#:空合并运算符
java·前端·数据库
小羊没烦恼!4 小时前
铁道部新客票系统设计(二)
开发语言·前端·数据库·python·oracle·c#·php
智能直播6 小时前
RK3518:1.5G 内存 + 8G 存储,如何跑起硬件编解码、Web、AI 识别、绿幕特效
前端·人工智能·5g
掘金酱7 小时前
【10.24 特别活动】AI 时代,程序员的新饭碗在哪里?
前端·人工智能·后端
excel8 小时前
多进程环境下使用 PM2 部署 Socket.IO:需要注意什么
前端
IT_陈寒8 小时前
Redis的原子性竟然失效了?记一次分布式锁翻车实录
前端·人工智能·后端
_菜鸟果果9 小时前
高德地图 JS API 2.0 在国产 Linux/ARM 电脑上渲染失败 的排查与解决
linux·开发语言·javascript
时间的情敌9 小时前
《回顾 2018 前端:Vue2 成熟期,Webpack4 发布,PWA 大火》
前端
Java后端的Ai之路10 小时前
前端技术Vue-09-webpack-vuejs-实战
前端·vue.js·webpack