EvaluationSystem:中间件和共享模块

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();
};
posted @ 2022-08-28 16:09  小超不挑食  阅读(22)  评论(0编辑  收藏  举报