【问题标题】:SailsJS override model methodsSailsJS 覆盖模型方法
【发布时间】:2014-06-21 16:36:13
【问题描述】:

我正在将缓存 (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
  });
}

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

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

【问题讨论】:

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


    【解决方案1】:

    缓存是我们喜欢 Waterline 的东西,但目前真正获得您想要的东西的唯一方法是 create your own adapter。覆盖findfindOne 在这一点上并不可行,因为如果您的缓存变为空并且您想继续查询,则没有访问底层“父”方法的好方法。

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

    【讨论】:

    • 这仍然是真的 - 具体来说,它仍然无法访问“父”方法吗?
    • 仍然如此。您始终可以创建自己的方法(例如 findOneCached )并从其中调用 findOne,不过...
    • 这是一个有意识的设计决定吗?如果没有,我可以考虑创建一个 PR。 (如果是这样,它看起来确实有点奇怪/令人失望。理由是什么?)
    猜你喜欢
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    相关资源
    最近更新 更多