gpt4 book ai didi

node.js - 在 Express Nodejs 中记录用户事件

转载 作者:行者123 更新时间:2023-12-05 06:12:32 25 4
gpt4 key购买 nike

我有一个带有 express 的后端 api。我已经使用 winstonmorgan 实现了日志记录。

我的下一个要求是将用户的事件记录到数据库 MySQL 中:时间戳、用户以及他获取或更改的内容。我在网上搜索并找到了 this .但由于目前还没有答案,所以我来到这里。

我的想法:我可以在我响应客户端之前,在我的路由处理程序中添加另一个查询,该查询 INSERT 上面提到的所有信息。但我很好奇是否有另一种方法可以完美地实现它。

最佳答案

从以下案例中选择最适合您系统的方法。

根据用例决定您的事件日志应该是持久的还是在内存中。让我们假设持久化并且 Db 是 mySQL。

如果您的数据已经是数据库,则没有必要再次存储所有数据,您可以只存储主要用于标识的键/ID,用于您执行了 CRUD 的行。如果执行的操作在事件表中始终是固定的或序列化的 JSON,则可以存储为外键。例如,结构可以如下所示,其中 activity_data 是序列化的 JSON 值。

ID | activity_name | activity_data | start_date | end_date | 

如果再次收集数据时遇到巨大困难,在发送响应之前存储事件结束时,您可以考虑将事件函数应用于为 mySQL 创建的数据库抽象层或包装器模块(假设)。例如:

try {
await query(`SELECT * FROM products`);
//performActivity(insertion)
}catch{
//performErrorActivity(insertion)
}

在这里,我们需要考虑一个关于性能的小折衷,因为我们在每一步都执行插入操作。

如果我们想一次完成所有操作,我们需要维护一个集合,将所有事件的引用加起来,例如 request.activityPayload 或者可能是一个缓存,最后执行插入.

如果您正在考虑专门为事件添加新的数据源,强烈建议使用非关系数据库来存储/转储此类数据(MongoDB 自以为是)。这是因为与关系数据库相比,它不关注模式结构,而且与 mySQL 相比,您可以获得性能优势,特别是在事件存储的情况下。

关于node.js - 在 Express Nodejs 中记录用户事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63610822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com