javascript - meteor apollo graphql/sequelize 缓存查询结果以避免多次相同的查询

标签 javascript meteor sequelize.js graphql apollo

我使用 Apollo/graphql/sequelize 来获取以下关系:

我有多个标记。每个只有一种风格。标记可以使用相同的样式:

Sequelize :

var Marker = db.define('markers', {
  name: {type: Sequelize.TEXT},
  idstyle: {type: Sequelize.INTEGER},
}, {timestamps: false});
const Markers = db.models.markers;

var Style = db.define('styles', {
  name: {type: Sequelize.TEXT},
  icon: {type: Sequelize.TEXT}
}, {timestamps: false});

Marker.belongsTo(Style, {foreignKey: 'idstyle'});

graphql 架构:

type Marker {
    id: Int
    name: String
    style: Style
}

type Style {
    id: Int
    name: String
    icon: String
}

type Query {
  marker(limit: Int, offset: Int): [Marker]
  style(limit: Int, offset: Int): [Style]
}

解析器:

Query: {
        async marker(root, args, context) {
            return Markers.findAll({limit: args.limit, offset: args.offset});
        },
        async style(root, args, context) {
            return Styles.findAll({limit: args.limit, offset: args.offset});
        }
    },
    Marker: {
        async style(marker) {
            return marker.getStyle();
        }
    }

当我运行以下查询时,我意识到似乎没有任何智能缓存:

query{
  marker{
    name
    style{
      name
    }
  }
}

似乎相同的样式被再次查询,即使它们已经作为另一个标记的结果返回。您可以看到请求的样式 ID 重复:

enter image description here

最佳答案

关于javascript - meteor apollo graphql/sequelize 缓存查询结果以避免多次相同的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38794428/

相关文章:

动态更新 WTForms 选择字段的 JavaScript/Ajax

javascript - trim() 函数在 IE8 中不起作用?

javascript - 如何在 Angular/Meteor 中有条件地显示 ng-repeat 内的按钮

node.js - 模型名称未在引用列上定义。我正在尝试为谁在 sequelize js 上创建 bus_driver 做一个引用列

javascript - 如何以编程方式使用 AngularJS 提交表单

javascript - 使用 jQuery 移动事件处理程序

javascript - 在 Meteor 启动时向集合中插入数据

javascript - i18n 用于 react 组件的数组元素

sql - 使用 Through 序列化多对多关系不会插入附加属性

mysql - beforeCreate Hook 更改未保存到数据库