You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为Express.js的IGDB API查询应用实现缓存系统示例请求

简单实现IGDB查询缓存的示例

Hey there! 我明白你觉得那些缓存库看起来有点复杂,其实不用慌——咱们选个最容易上手的方案,比如apicache,几行代码就能给你的游戏查询接口加上缓存,提升响应速度。

步骤1:安装apicache

在项目根目录运行:

npm install apicache

步骤2:修改你的Express路由/控制器

下面是两种实现方式,选你觉得顺手的就行:

方式1:路由级缓存(最省心)

直接把缓存中间件加到路由上,自动处理缓存逻辑:

const express = require('express');
const router = express.Router();
const apicache = require('apicache');
const client = require('./path-to-your-igdb-client'); // 替换成你的IGDB客户端路径

// 初始化缓存,默认过期时间设为1小时(3600秒)
const cacheMiddleware = apicache.middleware;

// 自定义缓存键:用查询的关键词作为唯一标识,确保不同关键词缓存不同结果
apicache.options({
  defaultDuration: 3600,
  appendKey: (req) => req.params.text
});

// 给你的查询路由加上缓存中间件
router.get('/games/:text', cacheMiddleware('1 hour'), (req, res) => {
  client.games({
    fields: '*',
    limit: 20,
    offset: 0,
    search: req.params.text
  })
  .then(igdbResponse => {
    res.send(igdbResponse.body);
  })
  .catch(err => {
    res.status(500).send({ error: '查询游戏失败', details: err });
  });
});

module.exports = router;

方式2:手动控制缓存(更灵活)

如果你想在函数内部自己控制缓存逻辑,也可以这样写:

const apicache = require('apicache');
const client = require('./path-to-your-igdb-client');
const cacheStore = apicache.getCache(); // 获取缓存实例

exports.findGameByKeyWord = function(req, res) {
  const cacheKey = `game-search-${req.params.text}`; // 用关键词生成唯一缓存键

  // 先检查缓存
  cacheStore.get(cacheKey, (err, cachedData) => {
    if (cachedData) {
      // 有缓存直接返回
      return res.send(cachedData);
    }

    // 没有缓存,调用IGDB API
    client.games({
      fields: '*',
      limit: 20,
      offset: 0,
      search: req.params.text
    })
    .then(igdbResponse => {
      // 把结果存入缓存,过期1小时
      cacheStore.set(cacheKey, igdbResponse.body, 3600, () => {});
      res.send(igdbResponse.body);
    })
    .catch(err => {
      res.status(500).send({ error: '查询游戏失败', details: err });
    });
  });
};

另一个简单选项:node-cache-manager

如果你不想用apicache,node-cache-manager也是个不错的选择,它支持多种存储(内存、Redis等),内存缓存的实现也很简单:

步骤1:安装node-cache-manager

npm install cache-manager

步骤2:修改你的查询函数

const cacheManager = require('cache-manager');
const client = require('./path-to-your-igdb-client');

// 初始化内存缓存,过期时间1小时
const memoryCache = cacheManager.caching({ store: 'memory', ttl: 3600 });

exports.findGameByKeyWord = function(req, res) {
  const cacheKey = `game-search-${req.params.text}`;

  memoryCache.get(cacheKey, (err, cachedResult) => {
    if (cachedResult) {
      return res.send(cachedResult);
    }

    client.games({
      fields: '*',
      limit: 20,
      offset: 0,
      search: req.params.text
    })
    .then(igdbResponse => {
      memoryCache.set(cacheKey, igdbResponse.body, { ttl: 3600 }, () => {});
      res.send(igdbResponse.body);
    })
    .catch(err => {
      res.status(500).send({ error: '查询游戏失败', details: err });
    });
  });
};

小提示

  • 缓存过期时间可以根据你的需求调整,比如改成'30 minutes'或者1800秒
  • 内存缓存会在服务器重启后清空,如果需要持久化缓存,可以换成Redis存储(apicache和node-cache-manager都支持)
  • 别忘了加上错误处理,避免API调用失败时服务器崩溃

内容的提问来源于stack exchange,提问作者Sofiane Hadjadj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:43:20