我正在使用Node.js开发一个Web服务“ A”,该服务与另一个服务“ B”进行通信。A首先需要从B获取访问令牌,并且需要在令牌过期时刷新访问令牌。
我对Node.js不太熟悉,我需要存储访问令牌和来自B的刷新令牌,并不时刷新它们,但是我不确定是否有全局变量来执行此操作。例如,在Flask中,我会将令牌保存在app ['tokens']中,并可以对其进行更新。
基本上我想做的是拥有一个B类和一个B全局对象,B将具有accessToken和refreshToken字段,obj.sendRequest({requestInfo})将通过检查令牌的到期时间和刷新将请求发送给B服务。如果有必要的话。
解决Node.js中此类问题的最佳实践是什么?
从您的问题中,我看不到您是否正在使用TypeScript。我强烈推荐它,但不是必需的。我将以TypeScript示例为您提供答案,因为它更易于阅读和理解(我认为)。使其适应纯JS应该很容易。
class ApiService {
private accessToken?: string
private accessTokenExpires?: Date
private async getAccessToken(): Promise<void> {
const apiResult = await GET_TOKEN_FROM_API
this.accessToken = apiResult.access_token
this.accessTokenExpires = apiResult.access_token_expires
}
public async GetItem(id: string): Promise<Item> {
if (!this.accessToken || this.accessTokenExpires < new Date()) {
await this.getAccessToken()
}
return GET_ITEM_FROM_API
}
}
export let itemService = new ItemService()
export function mockitemService(mock: any) {
itemService = mock
}
在您想上课的地方,您可以
import { itemService } from './services/item'
const item = itemService.getItem('123')
像这样使用ServiceClasses可以使以后维护代码或使用模拟数据源编写测试变得更加容易。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句