node.js - 从 sequelize 钩子(Hook)返回不同的结果

标签 node.js caching sequelize.js

我试图整理我的缓存是如何工作的,因此想将它实现到我的模型的钩子(Hook)中。这是我迄今为止实现的,我可以看到它正在正确设置和获取缓存。

hooks: {
        beforeFind: function(opts,fn) {
            cache.get(this.getTableName() + ':' + opts.where.id, function(err, result) {
                if (result) {
                    return fn(null, result);
                }

                return fn(null, opts);
            });
        },
        afterFind: function(result, options, fn) {
            cache.set(this.getTableName() + ':' + result.getDataValue('id'), result, function () {
                return fn(null, result);
            });
        },
}

问题是,缓存命中后,它仍在执行数据库查询并从数据库返回结果。

有人可以告诉我如何从缓存中返回结果而不是在缓存命中的情况下执行数据库查询吗?

最佳答案

我们看一下代码findAll (因为它要求所有的发现)。您可以看到,它将返回 Promise,首先执行钩子(Hook),然后在 block 中进行查询。这就是为什么您不能以这种方式实现缓存的原因。这个issue有热议关于 sequelize 需要如何实现插件系统(尤其是缓存)。

你能知道什么?看看这个lib ,其中缓存对象是在模型上实现的。

关于node.js - 从 sequelize 钩子(Hook)返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30127024/

相关文章:

node.js - 使用http查询字符串作为数据库对象node.js/express

javascript - 包含外部 JS 文件的 NodeJS Express sendFile

javascript - 存储随机句子生成器的结果

mongodb - node.js 身份验证与 Sequelize 和 Passport - promise 和回调混淆

node.js - Sequelize设置关联值

sql-server - sequelize模型领域的条件引用

node.js - 将 Socket.IO 与 Servlet 结合使用

java - Java String getBytes ISO_8859_1 的 Node.js 等效项

缓存目录 : Failed to find configured root that contains 的 Android FileProvider

javascript - JQuery - 事件绑定(bind)和缓存元素