/** * 控制器基类 * * @author CaiAoLin * @date 2017/6/29 * @version */ import crypto from "crypto"; import Url from "url"; import Moment from "moment"; import menuData from "../../../config/menu"; class BaseController { /** * 页面title * * @var string */ title = ''; /** * 构造函数 * * @return {void} */ constructor() { if (new.target === BaseController) { throw new Error('BaseController不能实例化,只能继承使用。'); } } /** * 初始化函数 * * @param {object} request * @param {object} response * @param {function} next * @return {void} */ init(request, response, next) { // 获取当前控制器和动作名称 let urlInfo = Url.parse(request.originalUrl, true); let url = urlInfo.pathname.substr(1); let actionInfo = url.split('/'); let controller = 'index'; let action = 'index'; switch (actionInfo.length) { case 1: controller = actionInfo[0]; break; case 2: controller = actionInfo[0]; action = actionInfo[1]; break; } // 菜单数据 response.locals.menu = menuData; // 二级菜单数据 response.locals.secondMenu = menuData[controller] !== undefined && menuData[controller].children !== undefined ? menuData[controller].children : {}; // url相关数据 response.locals.urlQuery = JSON.stringify(urlInfo.query); response.locals.controller = controller; response.locals.action = action; // 用户session数据 response.locals.manager = request.session.managerData; // moment工具 response.locals.moment = Moment; next(); } /** * 验证方法 * * @param {object} request * @param {object} response * @param {function} next * @return {void} */ auth(request, response, next) { // 判断session let mangerData = request.session.managerData; try { if (typeof mangerData !== 'object' || Object.keys(mangerData).length < 0) { throw 'err data'; } if (mangerData.username === undefined || mangerData.loginTime === undefined) { throw 'username empty'; } // 校验session let sessionToken = crypto.createHmac('sha1', mangerData.loginTime + '') .update(mangerData.username).digest().toString('base64'); if (sessionToken !== mangerData.sessionToken) { throw 'session error'; } } catch (error) { console.log(error); // 未登录 response.redirect('/login'); } next(); } } export default BaseController;