在一个模型中使用两个不同的适配器

时间:2014-03-13 17:04:45

标签: sails.js waterline

我想使用mongo存储全局Feed的数据,但我想用redis缓存内存中的最新帖子。有没有办法设置一个模型使用两个适配器?如果没有,我想我会尝试让一个控制器使用两个模型。

1 个答案:

答案 0 :(得分:6)

这是一项实验性功能,但您可以让一个模型使用多个连接,并且连接可以使用不同的适配器:

在Sails v0.9.x模型中,mongo中定义了redis/config/adapters.js

module.exports = {

    adapter: ['mongo', 'redis']
    attributes: {...}

}

在Sails v0.10.x模型中,mongo中定义了redis/config/connections.js

module.exports = {

    connections: ['mongo', 'redis']
    attributes: {...}

}

但是,您无法指定某些属性使用一个连接,而其他属性使用另一个属性。如果涉及多个适配器,并且适配器具有相同的方法,则它们将合并在一起。在同一模型中使用sails-mongosails-redis就是这种情况;这两个适配器都有findcreateupdatedestroy,因此您的模型最终只会使用其中一个适配器'方法(sails-redis,在上面的例子中)。

然后使用多个适配器是什么?这是一种向模型添加外部API方法的方法。例如,如果您有一个File模型表示存在于Amazon S3上的文件,则可以使用sails-s3适配器,uploaddownload方法,以及{{1}存储有关文件的元数据。

缓存也是active development中的一项功能,但与此同时,您最好的选择是使用单独的缓存模型,如您所建议的那样。