ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

EvaluationSystem:中间件和共享模块

2022-08-28 16:34:43  阅读:222  来源: 互联网

标签: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,模块
来源: https://www.cnblogs.com/zjacky/p/16632887.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有