javascript - 带有生命周期钩子的事件驱动 NodeJS 应用程序架构
问题描述
我有一个关于开发具有自己的生命周期和事件以在全球范围内跟踪服务器活动的 Nodejs 应用程序的一般性问题。
我需要什么?
任何
- 参考
- 技巧和窍门
- 蓝图
- 构架
背景
已经开发了一个带有数据库、身份验证和文件上传的后端。我做得非常务实,而且效果很好。但是现在我想开发一个新的更好的架构,它是事件驱动的来跟踪活动和生命周期挂钩到初始化模块。
我正在研究 Libs,这似乎很棒,但我需要知道我是否走对了路。
这是最近的后端,我想从核心更新:
目标
节点需要更加抽象和事件驱动,以便更全局地跟踪漏洞过程的活动。
我在考虑一个核心模块,它定义了事件和挂钩的基础,这些事件和钩子监听了孔应用程序过程。
所以其他模块,如数据库处理,或身份验证等可以被包装到它上面。
我的问题
我怎样才能有一个像活动记录器这样的助手,它通过洞应用程序进行监听,所以我不需要在每个操作中都导入记录器?可能吗?这有道理吗?
示例案例
核心模块跟踪数据库活动:
系统将数据放入数据库,核心监听它,跟踪它并将此信息推送到使用数据库的记录器中。
问题
例如,我坚持一个简单的架构问题:
如果我有一个数据库类,并且我希望 Core(它是一个扩展的 EventErmitter)来监听数据库操作,我不能在使用数据库的 Core 内部有一个记录器,因为我不能一次将这些模块相互引用:
// Core Module
const EventErmitter = require('events');
const Database = require('./database)';
module.exports = class Core extends EventEmitter {
constructor() {
super();
this.logger = new Database('Logger');
this.on('mounted', () => {
this.logger.put('instance mounted')
});
this.on('putData', () => {
this.logger.put('dataPut')
});
this.emit('mounted');
}
}
// Database Module
const Core = require('./core');
const PouchDB = require('pouchdb'); // Which database lib to use is not important yet
let core = new Core();
module.exports = class Database {
constructor(name, options) {
this.id = generateID();
this.name = name;
this.created = JSON.stringify(new Date()); // TODO doubled Quotes
this.options = options || {};
this.db = new PouchDB(name);
core.emits('mounted')
}
put(data) {
this.db.put(data);
core.emits('dataPut')
}
}
所以我注意到,我需要任何起点。:秒
我查看NodeJS EventErmitter
并发现 NodeJS 进程也在 EventErmitter 上。
我还查看了几个用于 NodeJS 生命周期事件的 Tuts,但无论如何它并不能真正帮助启动架构。
我希望你们中的一些人有很好的参考资料或“蓝图”,这有助于我为我的节点开发一个好的核心。:)
到目前为止,祝您度过愉快的一天,并保持安全!
问候
解决方案
推荐阅读
- react-native - 与计算机断开连接后,React Native 应用程序无法播放 mp3
- mongodb - 可以匹配填充的嵌套数组吗?
- javascript - redux 会在任何地方更新值还是只存储数据?
- r - 根据动态模式过滤行
- google-analytics - 将谷歌搜索控制台与分析连接时出现问题
- java - 如何在 java/groovy 中解析带有 html 内容的 xml 作为值
- r - 使用 dplyr 按行用以前的值填充缺失值
- python - 数据框以特定格式合并
- python - Pycharm Pro 通过 SSH 隧道连接到 PostgreSQL 数据库不适用于 Django
- reporting-services - 同步两个 SSRS 报告的分页