Node typescript库环境特定的配置

问题描述 投票:0回答:1

我是Node和Typescript的新手。我正在开发一个节点库,该库可以连接到另一个Rest API来获取和发布数据。一个或任何UI应用程序都将使用此库,以从API服务发送和接收数据。现在我的问题是,如何在库中维护特定于环境的配置?如前:

消费电话GET /user消费者方的用户端点将库中的方法调用为get data

但是,如果使用者正在测试环境中调用用户端点,我希望该库访问以下API网址

用于测试http://api.test.userinformation.company.com/user对于Beta http://api.beta.userinformation.company.com/user

据我了解,该库只是一个参考,并在使用者应用程序中运行。库肯定可以从使用者那里获得环境,但是我不希望使用者必须指定需要点击的完整URL,因为这是图书馆的职责。

注意:URL并不是唯一的问题,我可以通过库中的环境切换来解决,我有一些基于环境的客户端密钥,这些环境既不能存储在代码中,也不能签入源代码控制。

附加信息

(根据jfriend00的评论要求]

我的库中有一个LibExecutionEngine类和一个方法,它是库的入口点:

export class LibExecutionEngine implements ExecutionEngine {
    constructor(private environment: Environments, private trailLoader: 
    TrailLoader) {}

        async GetUserInfo(
            userId: string,
            userGroupVersion: string
            ): Promise<UserInfo> {
               return this.userLoader.loadUserInfo(userId, userGroupVersion)
        }
}

export interface ExecutionEngine {
    GetUserInfo(userId: string, userGroupVersion: string): Promise<UserInfo>

}

消费者通过创建LibraryExecution的实例然后调用例如getuserinfo来开始使用该库。如您所见,该类的构造函数接受一个环境。在库中拥有环境后,就需要以某种方式从构造函数中加载键API UrlAPIClientIdAPIClientSecret的值。我知道有两种方法可以做到这一点:

选项1

我可以进行类似this._configLoader.SetConfigVariables(environment)的操作,其中configLoader.ts是一个从文件({environment}.json)加载特定配置值的类,但这意味着我维护上述URL变量和相应的clientidclientsecret以便能够找到json文件中的URL,我不应该签入源代码管理。

选项2

我可以使用dotenv npm包,并创建一个.env文件,在其中定义三个键,然后将值存储在部署配置中,该配置对于独立可部署的应用程序非常适用,但这是一个库,并且没有不能在任何环境中自行运行。

选项3

接受使用者的配置对象,这意味着库的使用者根据库的访问环境提供URL,clientId和clientSecret,但是为什么要承担维护必要的变量的责任呢?对消费者?

请提出最佳实施方法的建议。

node.js typescript shared-libraries
1个回答
1
投票

所以,我想我有些清楚了。让我们调用我的库L,使用应用程序C1和该库进行调用以获取用户信息为A的API。所有这些都是我们组织中的内部应用程序,并且具有可以进行通信的OAuth设置,我们的信息安全团队为各个应用程序提供了这些客户端ID和机密信息,因此我想我的意思是:C1将要求他们自己的clientid和[ C0]击中clientsecretA,然后URL会将三个配置值传递给库,库使用该值与C1通信。以后的某些A同样适用。

这意味着C2某种程度上需要从其使用者LC1等接受具有所有必需配置值的完整配置对象。>

是的,这听起来像是正确的方法。该库只是执行所告知内容的一些代码。在这种情况下,客户端必须从信息安全团队获取clientid和clientsecret并对其进行维护并保持安全,并且客户端也具有随其附带的URL。因此,客户端将所有这些信息传递到您的库中,每个实例最好只传递一次,然后在该实例的持续时间内将其保存在您的实例数据中]

© www.soinside.com 2019 - 2024. All rights reserved.