SailsJS覆盖模型方法

时间:2014-05-05 11:32:16

标签: javascript node.js caching redis sails.js

我正在将缓存(redis)添加到我的项目中,并希望将其编码到模型逻辑而不是控制器中。我需要覆盖模型方法并在那里添加缓存逻辑。

我知道我可以覆盖某些方法,例如findfindOne,但我不知道该返回什么。

示例(伪)

findOne: function () {
  cache.get(key, function (err, data) {
    if (data === null) // No cache data
      // get the data and return it
    else
      // return the cache data
  });
}

问题是这些模型方法不仅仅返回数据,它们返回模型本身的实例(用于链接)。

不确定如何返回数据以及如果尚未设置如何获取数据。有没有人做过这样的事情?

1 个答案:

答案 0 :(得分:1)

缓存是我们热爱Waterline的东西,但目前真正得到你想要的唯一方法是create your own adapter。此时覆盖findfindOne实际上并不可行,因为如果您的缓存显示为空并且您想继续查询,则无法访问基础“父”方法。

在您的情况下,分支现有的一个适配器(如sails-mysql)来添加Redis缓存可能比从头开始更具建设性。如果可以将缓存层添加为分叉适配器的单独的可安装模块(即依赖项),则可以更容易地跨其他适配器复制功能,并最终滚入适配器规范本身。如果有人想要解决这个问题,那将是一个巨大的贡献!您可能还会在Sails IRC频道(irc://irc.freenode.net/sailsjs)中询问是否有人已在处理类似的事情。

相关问题