UNPKG

mm_os

Version:

MM_OS服务端架构,用于快速构建应用程序,支持网站建设、小程序后台、AI应用、物联网(IOT/AIOT)、游戏服务端等多种场景。

126 lines (115 loc) 2.59 kB
const { Drive } = require('mm_machine'); /** * Koa中间件基类 */ class Middleware extends Drive { static config = { // 中间件名称 name: 'default', // 状态 0:禁用 1:启用 state: 1, // 排序,越小越靠前 sort: 100 }; /** * 构造函数 * @param {object} config 配置参数 * @param {object} parent 父对象 */ constructor(config, parent) { super({ ...Middleware.config, ...config || {} }, parent); } } /** * 获取模板目录 * @returns {string} 模板目录 */ Middleware.prototype.getTplDir = function () { return __dirname; }; /** * 初始化核心 * @param {object} adapter 适配器 * @param {object} eventer 事件总线 * @param {object} logger 日志管理器 * @returns {Promise<void>} */ Middleware.prototype._initCore = async function (adapter, eventer, logger) { // 初始化依赖项 if (logger) { this.setLogger(logger); } if (eventer) { this.getEventer = function () { return eventer; }; } if (adapter) { this.getAdapter = function () { return adapter[this.config.type]; }; } this._register(); }; /** * 注册中间件 * @private * @returns {Promise<void>} */ Middleware.prototype._register = async function () { // 注册中间件到Koa应用 this.getAdapter().use(this.create()); }; /** * 注册中间件 * @returns {Promise<void>} */ Middleware.prototype.register = async function () { await this._register(); }; /** * 创建中间件函数 * @returns {Function} Koa中间件函数 */ Middleware.prototype.create = function () { var self = this; if (!this.config.state) { return async function (ctx, next) { return await next(); }; } return async (ctx, next) => { await self.before(ctx); await self.main(ctx, next); await self.after(ctx); }; }; /** * 中间件前置处理 * @returns {Promise<void>} */ Middleware.prototype.before = async function () { }; /** * 中间件主逻辑处理 * @param {object} ctx Koa上下文 * @param {Function} next 下一个中间件 * @returns {Promise<void>} */ Middleware.prototype.main = async function (ctx, next) { await next(); }; /** * 中间件后置处理 * @returns {Promise<void>} */ Middleware.prototype.after = async function () { // 默认空实现,由子类重写 // this.log('debug', 'middleware after 被调用', { ctx }); }; // 模块导出 module.exports = { Middleware };