Apollo Link Token Refresh 项目教程
1. 项目的目录结构及介绍
apollo-link-token-refresh/
├── src/
│ ├── tokenRefreshLink.ts
│ └── queuing.ts
├── package.json
├── README.md
└── tsconfig.json
src/
: 包含项目的主要源代码文件。tokenRefreshLink.ts
: 实现 JWT 刷新逻辑的核心文件。queuing.ts
: 处理操作队列的辅助文件。
package.json
: 项目的依赖管理文件。README.md
: 项目的介绍和使用说明。tsconfig.json
: TypeScript 配置文件。
2. 项目的启动文件介绍
项目的启动文件主要是 src/tokenRefreshLink.ts
,该文件定义了 TokenRefreshLink
类,用于处理 JWT 令牌的刷新逻辑。以下是该文件的主要内容:
import { ApolloLink, Observable, Operation, NextLink, FetchResult, fromPromise } from '@apollo/client/core';
import { OperationQueuing } from './queuing';
export class TokenRefreshLink<AccessTokenPayloadType = string> extends ApolloLink {
private accessTokenField: string;
private isTokenValidOrUndefined: IsTokenValidOrUndefined;
private fetchAccessToken: FetchAccessToken;
private handleFetch: HandleFetch<AccessTokenPayloadType>;
private handleResponse: HandleResponse;
private handleError: HandleError;
private fetching: boolean;
private queue: OperationQueuing;
constructor(params: TokenRefreshLinkOptions<AccessTokenPayloadType>) {
super();
this.accessTokenField = params.accessTokenField || 'access_token';
this.isTokenValidOrUndefined = params.isTokenValidOrUndefined;
this.fetchAccessToken = params.fetchAccessToken;
this.handleFetch = params.handleFetch;
this.handleResponse = params.handleResponse || parseAndCheckResponse;
this.handleError = params.handleError;
this.fetching = false;
this.queue = new OperationQueuing();
}
// 其他方法...
}
3. 项目的配置文件介绍
package.json
package.json
文件包含了项目的依赖、脚本和其他元数据。以下是该文件的部分内容:
{
"name": "apollo-link-token-refresh",
"version": "0.2.1",
"description": "An Apollo Link that performs renew expired JWT (access tokens)",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"scripts": {
"build": "tsc",
"prepare": "npm run build"
},
"dependencies": {
"@apollo/client": "^3.0.0",
"typed-inject": "^2.1.0"
},
"devDependencies": {
"typescript": "^4.0.0"
}
}
tsconfig.json
tsconfig.json
文件用于配置 TypeScript 编译选项。以下是该文件的内容:
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"lib": ["es2015", "dom"],
"outDir": "./lib",
"strict": true,
"esModuleInterop": true
},
"include": ["src"]
}
以上是 apollo-link-token-refresh
项目的基本教程,涵盖了项目的目录结构、启动文件和配置文件的介绍。希望这些内容能帮助你更好地理解和使用该项目。