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();
};