mm_os
Version:
MM_OS服务端架构,用于快速构建应用程序,支持网站建设、小程序后台、AI应用、物联网(IOT/AIOT)、游戏服务端等多种场景。
181 lines (162 loc) • 3.99 kB
JavaScript
const {
Drive
} = require('mm_machine');
/**
* 应用处理器基类(应用服务层)
* 负责处理请求,调用服务层,返回响应
*/
class Handler extends Drive {
static config = {
name: 'default',
title: '处理器',
// 依赖的服务
services: [],
// 依赖的仓储
stores: [],
// 依赖的富血模型
models: [],
timeout: 30000,
perf_log: false, // 是否记录性能日志
};
/**
* 构造函数
* @param {object} config 配置参数
* @param {object} parent 父对象
*/
constructor(config, parent) {
super({ ...Handler.config, ...config || {} }, parent);
// 仓储管理集合
this._store = {};
// 服务管理集合
this._service = {};
// 富血模型管理集合
this._model = {};
}
}
/**
* 预设
*/
Handler.prototype._preset = function () {
/** === 基础设施 === */
// 文件管理器
this._filer = null;
// 消息推送器
this._sender = null;
// 广播器
this._pusher = null;
// 通知器
this._notifier = null;
};
/**
* 获取模板目录
* @returns {string} 模板目录
*/
Handler.prototype.getTplDir = function () {
return __dirname;
};
/**
* 初始化依赖检查
*/
Handler.prototype._checkDeps = function () {
let {
services,
stores,
models
} = this.config;
for (var i = 0; i < services.length; i++) {
var name = services[i];
if (!this._service[name]) {
this.log('error', `${name}服务(service)未找到`);
}
}
for (var i = 0; i < stores.length; i++) {
var name = stores[i];
if (!this._store[name]) {
this.log('error', `${name}仓储(store)未找到`);
}
}
for (var i = 0; i < models.length; i++) {
var name = models[i];
if (!this._model[name]) {
this.log('error', `${name}模型(model)未找到`);
}
}
};
/**
* 初始化核心
* @param {object} app 当前应用
* @param {object} eventer 事件总线
* @param {object} logger 日志管理器
*/
Handler.prototype._initCore = async function (app, eventer, logger) {
// 初始化依赖项
if (logger) {
this.setLogger(logger);
}
if (eventer) {
this.getEventer = function () {
return eventer;
};
}
let {
store,
service,
model
} = app;
this._store = store;
this._service = service;
this._model = model;
// 检查依赖项
this._checkDeps();
};
/**
* 销毁处理器
*/
Handler.prototype._destroy = async function () {
try {
// 清理资源
this._store = null;
this._service = null;
this._model = null;
this._db = null;
this._cache = null;
this._filer = null;
this._sender = null;
this._pusher = null;
this._notifier = null;
} catch (error) {
this.log('error', '销毁发生错误:', error);
}
};
/**
* 请求预处理方法
* @param {object} req 请求对象
* @param {object} res 响应对象
* @returns {Promise<void>}
*/
Handler.prototype._before = async function (req, res) {
this.log('debug', '请求预处理', { req, res });
};
/**
* 请求主处理逻辑
* 核心业务逻辑应该在此方法中实现
* @param {object} req 请求对象
* @param {object} res 响应对象
* @returns {Promise<object>} 处理结果
*/
Handler.prototype.main = async function (req, res) {
this.log('debug', '默认请求处理,子类应重写此方法', { req, res });
// 默认实现,子类必须重写
throw new Error('main 方法必须被重写');
};
/**
* 请求后处理方法
* @param {object} req 请求对象
* @param {object} res 响应对象
* @param {object} result 处理结果
* @returns {Promise<void>}
*/
Handler.prototype._after = async function (req, res, result) {
this.log('debug', '请求后处理', { req, res, result });
};
exports.Handler = Handler;