首页 > 解决方案 > REST API - 我了解响应缓存过程吗?(Node.js)

问题描述

我正在使用缓存响应对我的专业休息 api 进行编程。

我为这项任务选择了 NestJS 框架,我对我的推理是否正确有几个疑问。

我有 2 条路径:

1. /api/Pets | returns the logged-in user's pet lists
2. /api/Pets/categories | returns all available pet categories 

我使用 redis 进行缓存,因为我希望共享缓存。这就是为什么我为第二个端点构建了一个 redisStore 并编写了这个 HttpCacheInterceptor:

import {
  CACHE_KEY_METADATA,
  CacheInterceptor,
  ExecutionContext,
  Injectable,
} from '@nestjs/common';

@Injectable()
export class HttpCacheInterceptor extends CacheInterceptor {
  trackBy(context: ExecutionContext): string | undefined {
    let cacheKey = this.reflector.get(CACHE_KEY_METADATA, context.getHandler());

    if (cacheKey) {
      const request = context.switchToHttp().getRequest();

      if (Object.values(request.params).length) {
        const params = Object.values(request.params)
          .map((param) => '/' + param)
          .toString();

        cacheKey = cacheKey + params;
      }

      if (request._parsedUrl.query) {
        return `${cacheKey}-${request._parsedUrl.query}`;
      }

      return cacheKey;
    }

    return super.trackBy(context);
  }
}

但是我的第一个路由器总是向用户返回不同的响应,所以我无法将它存储在 redisStore 中。我将不得不使用内存缓存,但我不能在 DI 中声明两个缓存模块 - 那么我该如何处理呢?

标签: javascriptnode.jscachingnestjsrest

解决方案


推荐阅读