可以启动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应该足够了。