首页 > 其他分享 >EvaluationSystem:中间件和共享模块

EvaluationSystem:中间件和共享模块

时间:2022-08-28 16:23:45浏览次数:68  
标签:exports 登录 中间件 EvaluationSystem userId next state ctx 模块

1、共享模块(shared)

【第一】数据库连接(shared/sequelize.js)
// 数据库
const {Sequelize} = require('sequelize');

module.exports = new Sequelize({
    dialect: 'mysql',
    host: 'localhost',
    port: 3306,
    username: 'root',
    password: '2553Jacky',
    database: 'evaluation',
});
【第二】安全相关(shared/security.js)

安全相关,比如哈希函数

const crypto = require('crypto');
// SHA256加密
exports.sha256 = function (data) {
    return crypto.createHash('sha256').update(data).digest('hex');
};

2、中间件(middlewares)

中间件是业务无关的代码,根据需要在全局导入或者在路由导入。

【第一】鉴权(middlewares/authenticate.js)

读取cookie中的userId字段,并挂载到ctx.state.userId上。未登录用户的userId设置为0,不会强制重定向到登录页,保证一些允许登录用户或未登录用户业务的正常使用。

// 用户登录验证
//  读取cookie中的userId字段,并挂载到ctx.state.userId上。
//  未登录用户的userId设置为0,不会强制重定向到登录页,保证一些允许登录用户或未登录用户业务的正常使用
module.exports = async function (ctx, next) {
    ctx.state.userId = Number(ctx.cookies.get('userId', {signed: true}));
    await next();
};
【第二】错误处理(middlewares/errorHandler.js)

系统发生错误时,渲染错误页面。

// 错误处理器
//  系统发生错误时,渲染错误页面。
module.exports = async function (ctx, next) {
    try {
        await next();
    } catch (e) {
        await ctx.render('error', {
            error: e.message,
            title: '错误'
        });
    }
};
【第三】登录限制(middlewares/guard.js)

检测ctx.state.userId,如果为0则强制重定向到登录页,以保证需要登录来确认访问的页面权限

// 登录守卫,未登录用户将直接重定向到登录页
//  检测ctx.state.userId,如果为0则强制重定向到登录页,以保证需要登录来确认访问的页面权限
module.exports = async function (ctx, next) {
    if (!ctx.state.userId) {
        await ctx.redirect('/user/login');
        return;
    }
    await next();
};

标签:exports,登录,中间件,EvaluationSystem,userId,next,state,ctx,模块
From: https://www.cnblogs.com/zjacky/p/16632887.html

相关文章

  • EvaluationSystem:路由设置
    1、首页路由(routes/home.js)2、用户路由(routes/user.js)3、数据路由(routes/data.js)4、测评路由(routes/ceping.js)5、管理员路由(routes/)(//::todo)......
  • 使用Gradle构建spring-boot多模块项目
    一、目录结构.├──boogle-common│  ├──build.gradle.kts│  └──src├──boogle-core│  ├──build.gradle.kts│  └──src├──......
  • 中间件
    中间件中间件(middleware)一词每天都被不同的人群所提及,中间件的产品也大量出现在软件市场,但中间件的定义却一直比较模糊,导致中间件的分类也不很统一。也许正因为如此,......
  • vue3项目-小兔鲜儿笔记-02-首页模块01
    1.less自动化导入安装一个vue-cli插件,自动导入less文件vueaddstyle-resources-loader2.头部分类导航组件渲染实现头部一级分类和二级分类的渲染基本步骤:定......
  • Django入门到放弃之中间件
    1.Django中间件作用修改请求,即传送到view中的HttpRequest对象。修改响应,即view返回的HttpResponse对象。2.中间件五个方法process_request☆1.proce......
  • Django入门到放弃之Auth模块
    auth模块是Django提供的标准权限管理系统,可以提供用户身份认证,用户组和权限管理。auth可以和admin模块配合使用,快速建立网站的管理系统。1.内置属性方法authenticate......
  • 中间件服务
    ELK+zookeeper+kafka+rsyslog集群搭建centos7安装elasticsearch6.3.x集群并破解安装x-packELK7.6+Filebeat集群部署rsyslog+ELK收集Cisco日志Nginx自建SSL证书部署HTTP......
  • GNSS模块使用笔记
    目录目录GNSS芯片NMEA0183协议GNSS芯片ATGM336H-5N31(GPS+BDS双模)原理图NMEA0183协议《CASIC多模卫星导航接收机协议规范》前缀BD---北斗模式GP---GPS模......
  • hashlib模块
    hashlib模块1.什么是加密 将明文数据经过处理后变成秘文数据的过程 2.如何加密(加密算法) 通常情况下加密后的结果越长说明采用的加密算法越复杂 3.常见的加密算法......
  • postman:tests模块
    设置环境变量postman.setEnvironmentVariable("key","value");设置全局变量postman.setGlobalVariable("key","value");变量引用注:定义的变量在脚本中引用使用pm.glo......