在Node.js中拥有在应用程序生存期内有效的变量的最佳实践是什么?

时间:2019-03-21 17:40:36

标签: node.js api

我正在使用Node.js开发一个Web服务“ A”,该服务与另一个服务“ B”进行通信。 A首先需要从B获取访问令牌,并且需要在令牌过期时刷新访问令牌。

我对Node.js不太熟悉,我需要存储访问令牌,并且刷新令牌来自B,并不时刷新它们,但是我不确定是否有全局变量来执行此操作。例如,在Flask中,我会将令牌保存在app ['tokens']中,并可以对其进行更新。

基本上我想做的是拥有一个B类和一个B全局对象,B将具有accessToken和refreshToken字段,obj.sendRequest({requestInfo})将通过检查到期时间将请求发送到B服务。令牌,并在必要时刷新它们。

克服Node.js中此类问题的最佳实践是什么?

1 个答案:

答案 0 :(得分:1)

从您的问题中我看不到您是否正在使用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')

使用这样的ServiceClass可以使以后维护代码或使用模拟数据源编写测试变得更加容易。