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

詹姆斯·吉福德

我正在使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

请求消息值必须在静态生存期内有效

在node.js中执行“多线程”的最佳和有效方法是什么?

托管Node.js + MongoDB应用程序的最佳实践

在 Node.js(快速框架)中处理文本的有效方法是什么?

创建具有静态生存期的匿名变量时,最佳做法是什么?

在Node.js / MongoDB应用程序中添加默认管理员用户的最佳方法是什么?

在Windows上托管node.js应用程序的最佳方法是什么?

错误消息:Node.exe不是有效的Win32应用程序

节点printer.node不是有效的win32应用程序

在Node JS中仅读取文件第一行的最有效方法是什么?

Backbone.js和Node.js:寻找应用程序设置的最佳实践

Node.js读写Excel文件的最佳实践是什么?

在Node.js模块之间共享变量的最佳实践是什么

node.js控制台异步应用程序“最佳实践”

分发Node.js命令行应用程序的最佳实践

node.js&express-应用程序结构的全局模块和最佳实践

将Node.js应用程序部署到Azure的最佳实践

构建 Node.js 和 Socket.io 应用程序的最佳实践?

使用sqlite3在node.js中变量的有效性

var app = express();的用途是什么?在创建Node.Js应用程序的过程中?

Node.js中的应用程序范围变量?

使用Azure Storage / Blob服务设置Azure Node.js应用程序服务的最佳方法是什么

切换到Windows后,node.js错误-错误:%1不是有效的Win32应用程序

为什么使用()调用Node.js REPL中的函数有效?

什么是Node.js集群最佳实践?

带有node.js的Webworkers表达应用程序

从Node.js发送给Dialogflow的默认响应有效载荷是什么

Node.js API:有关日志的最佳实践

有什么方法可以创建Node.js(npm)应用程序的快捷方式桌面?