首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >截取执行前的knex.js查询

截取执行前的knex.js查询
EN

Stack Overflow用户
提问于 2019-10-14 17:39:31
回答 1查看 877关注 0票数 3

我正在研究一个应用程序的缓存策略,该应用程序将knex.js用于所有与sql相关的内容。有没有一种方法可以截取查询,以检查是否可以从缓存中获取该查询,而不是查询数据库?

简要介绍了knex.js事件,它有一个查询事件。Doc:查询事件在查询发生之前触发,提供有关查询的数据,包括连接的__knexUid / __knexTxId属性和toSQL中描述的有关查询的任何其他信息。对于记录整个应用程序中的所有查询非常有用。

这意味着可以做一些类似的事情(也可以从文档中)

代码语言:javascript
复制
  .from('users')
  .on('query', function(data) {
    app.log(data);
  })
  .then(function() {
    // ...
  });

但是,在实际执行对数据库的查询之前,是否可以让on query方法拦截并执行一些逻辑?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-15 08:00:13

我注意到这个建议被附加到一个Knex GitHub issue (归功于Arian Santrach),这似乎是相关的:

代码语言:javascript
复制
knex.QueryBuilder.extend('cache', async function () {
    try {
        const cacheKey = this.toString()
        if(cache[cacheKey]) { 
            return cache[cacheKey]
        }
        const data = await this
        cache[cacheKey] = data
        return data
    } catch (e) {
        throw new Error(e)
    }
});

这将允许:

代码语言:javascript
复制
  knex('tablename').where(criteria).cache()

检查同一查询的缓存数据。我认为无论您的缓存解决方案是什么,都可以使用类似的结构,使用查询的字符串表示作为键。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58374043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档