mm_os
Version:
MM_OS服务端架构,用于快速构建应用程序,支持网站建设、小程序后台、AI应用、物联网(IOT/AIOT)、游戏服务端等多种场景。
126 lines (115 loc) • 2.59 kB
JavaScript
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
};