【问题标题】:node.js architectural advice on avoiding global state关于避免全局状态的 node.js 架构建议
【发布时间】:2014-09-13 16:14:56
【问题描述】:

我正在从事一个小型的业余爱好项目,我真的很想得到一些意见和建议。

这是我第一个“真正的”node 项目,我希望它能教会我很多关于 node.js 开发的知识。我白天是一名 .net 开发人员,从事专业工作已有 15 年左右。我也有一段时间做 Java。我创建了用作微服务的小型 node.js 项目。

但是这个项目不能再归类为微服务了;-)

该项目的目的是对一些传感器数据进行采样,并进行一些报告。我在大学里玩弄 PLC 的想法。我通过从 PLC 采样并使用 ZeroMQ 发送数据来做到这一点。然后,我的 node.js 服务器会侦听此传感器数据,并将其存储在 MongoDB 中。

我在 REST api 中公开该数据。 REST api 还公开了批处理等资源和身份验证等其他内容。除此之外,我还有一个 AngularJS 应用程序,它创建定义了 UI。

真正让我烦恼的一件事是,我想全局分配正在运行的批处理。我有一批批次,其中一个是正在运行的。我看到有两种方法可以做到这一点,并且都说明了我在 node.js 世界中的新手状态。所有用户都应该能够看到正在运行的批处理,我也希望能够从代码中的任何位置轻松分辨。

1) 在 Mongo 中的对象上设置一个标志。这有很多问题。显而易见的是性能。我每秒接收 10 次传感器数据,我不想每次都询问数据库将其保存在哪个批次下。

2) 保存全局对象的信息。我也真的不喜欢这个。我不喜欢代码中的全局状态。

什么是做这种事情的好模式?我的问题有意义吗?

提前致谢

【问题讨论】:

  • 太宽泛了。请返回具体问题,并且请仅标记您正在解决的架构的点。老实说,您可能会在programmers.stackexchange.com/ 上发现更多的“闲聊”设计概念,可以容忍更多的聊天。或者您也可以在这里提出具体问题。
  • 嗯,也许你是对的......当我想到它时,我最感兴趣的是如何处理全局对象。将尝试完善问题。

标签: node.js angularjs mongodb design-patterns global


【解决方案1】:

您可以进行一个简单的 REST 调用来设置活动批处理,并在启动并准备好接受请求时在批处理中调用它。例如:

app.put('/active-batch', function(req, res, next){
    // Make sure req.body is defined
    app.set('active-batch', req.body);
    res.end();
});

然后在代码中你可以使用的任何地方:

app.get('active-batch');

app.set 可让您在应用中保存全局可访问的数据,app.get 可让您读取以前存储的数据。

【讨论】:

  • 我对需要帮助的人非常开放,但这真的能回答这个问题吗?更重要的是,您实际上在回答所提出的几个问题中的“哪一个”?很高兴您想提供帮助或取得成功或其他任何事情。但有些事情你真的应该不管。
  • 好的,谢谢。我只是想帮助提供我能理解的解决方案。在问题形成之前,我是否需要删除此答案?
  • 嗯,这真的只是我的意见,但我认为“问题”要求的比你回答的要多,而且这样做通常过于宽泛。因此,您可以认为这是一个合理的答案,也可以冒着因为它没有真正回答所要求的内容而可能导致的反对票的风险。这确实是您的选择,但通常有一个原因会导致您发现问题未得到解答,尤其是在现有 cmets 指出该原因的情况下。由你决定。
  • 谢谢!我再次阅读了这个问题,我认为它可能会回答,所以这次我要冒这个风险:)
猜你喜欢
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
  • 2017-01-20
  • 2016-01-23
  • 1970-01-01
  • 2016-07-10
相关资源
最近更新 更多