可以启动JS服务(在api / services目录下)来保存跨请求的对象

控制器在请求中丢失了状态。 但是我们可以使用服务来保持跨请求的对象吗?

我的用例是这样的:我必须维护一个twitterstream的池(通过像npm twitter这样的库)在打一个控制器时,用户启动一个stream。 我想保持一个所有的溪stream的地方。 服务目录看起来像放置这些stream(在一个数组中)的适当位置。

然后在击中另一个控制器,我想从该数组中获取适当的stream,并销毁,以便它停止streamapi。

那么服务文件夹对它有好处吗? 或者我需要在这里使用一些caching库?

编辑

Twitterstream代表与twitter apis的主动和持久连接。 所以我不认为他们可以存储在分贝(或caching到辅助内存)。

我认为你可以用这种方式使用任何require模块,比如在module.exports使用公共getter和setter来处理它。

假设你有一个名为myService.js的服务:

 var pool = []; // this will be initialized when the app starts module.exports = { addToPool: function(obj) { pool.push(obj); }, getPool: function() { return pool; } }; 

然后任何控制器(等)可以访问池:

 var myserv = require('myService'); myserv.addToPool({'one': 'two'}); var pool = myserv.getPool(); 

然而,

我从来没有使用主动内存来存储这样的东西。 你的泳池有多大? 你确定你不想通过数据库做到这一点?

另一个警告,我不积极,不会有一些干扰,前pool由一个用户发起的一种方法迭代,并被另一个用户发起的另一种方法改变。

是的,它可以,而服务是它的正确的地方,因为在帆船服务是一个逻辑的地方,你需要在许多地方使用。 但我需要build议你不要这样做! 相反,可以采用更无状态的方法:数据只存储在数据库中,然后状态可以从用户的数据库input中得到。 这样你可以扩展你的服务器没有任何问题:

假设我在server A上有一个Sails应用程序的实例。 然后我启动server B以保持需求。 Server A不会与server B共享variables,但他们可以共享一个数据库! 而SQL DB可以为并发和其他问题提供一些安全性,但是REDIS应该足够了。