node.js关于避免全局状态的体系结构建议



我正在做一个小的业余项目,我真的很想在那里得到一些意见和建议。

这是我的第一个"真实"节点项目,我希望它能教会我很多关于node.js开发的知识。我每天都是一名.net开发人员,并且已经在专业领域工作了大约15年。我也曾经做过Java。我创建了一些小的node.js项目,用作微服务。

但该项目不能再被归类为微型服务;-)

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

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

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

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

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

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

提前感谢

您可以对设置活动批进行简单的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可以读取以前存储的数据。

最新更新