做Node.js对象实例化,为每个用户创建一个对象

Do Node.js object instantiaton create one object per user?

本文关键字:用户 创建 一个对象 Node js 对象 实例化      更新时间:2023-09-26

所以我正在学习这个教程,学习如何在Node.js中制作一个RESTful API,其中的一部分突然让我有点担心。在应用程序中,一个对象被实例化来处理称为TaskRepository()的RESTful请求。

根据与本教程相关的Gist,您将看到以下代码片段:
var taskRepository = new TaskRepository();

我的问题是,这会为每个用户实例化一个TaskRepository()对象吗?在这种情况下,如果有足够高的流量,是否有可能很快耗尽内存?

这里的最佳实践是什么?

另外,如果是这种情况,您将如何通过编程绕过它以避免未来的交通堵塞?

在这个特定的API中,有一个创建任务的API,它返回一个任务ID。该任务将一直存在,直到将来某个API调用引用该特定ID并使用删除操作。

TaskRepository是每个服务器(为您的服务器创建一次),而不是每个用户。

这些任务不是针对每个用户的,但是当您创建任务并将其返回给请求者时,只有请求者可能知道ID并使用它,尽管由于本例没有创建随机ID,因此它们是可预测的,因此任何人都可以引用特定的ID。

如果在任务创建后不删除,任务将随着时间的推移而累积。通常,像这样的东西会创建某种非活动超时,如果任务在一段时间内(例如30分钟)不使用,则会自动删除任务。

对于您链接的Gist,答案是否定的。new TaskRepository()在服务器设置时被调用一次(就在创建var app = express的旁边),然后一个实例将被共享并用于所有请求。

现在,如果你在路由(app.get('stuff/etc', function () {})))中调用new TaskRepository(),那么你是正确的。它将为每个HTTP请求创建一个新的TaskRepository实例。