【问题标题】:Environment specific configuration of datasources in loopback4 applicationloopback4 应用程序中数据源的环境特定配置
【发布时间】:2020-08-16 23:41:45
【问题描述】:

我刚刚开始了我的第一个环回项目,并为应用程序选择了 loopback4 版本。它纯粹是一个服务器应用程序,它将与数据库(Redis 和 mongodb)进行交互,并由于微服务架构而调用外部 API 服务。

现在,我的应用程序中有 3 个数据源,即 mongodb、Redis 和基于 REST 的数据源来调用外部服务。我在前进中面临两个问题。

1.数据源的环境特定配置: 我需要根据 NODE_ENV 环境变量维护所有三个数据源的配置。对于 lb3,我找到了这个解决方案,

https://loopback.io/doc/en/lb3/Environment-specific-configuration.html#data-source-configuration

这在 lb4 中不起作用。一种解决方案是在src/datasources目录中添加名称为mongodb.staging.jsonmongodb.production.json的配置文件,redis和rest数据源的名称相同,并使用if条件根据NODE_ENV变量加载此配置并将其传递给数据源的构造函数。它可以工作,但看起来不太好,因为这应该是应用程序的责任。

有人可以为我推荐上述的 lb3 等效解决方案吗?

2。通过数据源调用外部 API: 在 lb4 中,要调用外部服务,建议使用单独的基于 REST 的数据源及其服务通过控制器调用它。现在,在 REST 数据源配置中,必须定义将发生在外部服务 https://loopback.io/doc/en/lb4/REST-connector.html#defining-a-custom-method-using-a-template 上的所有 API 调用的模板。

由于我的应用程序使用相对大量的请求参数大量调用外部服务。用请求参数声明每个 API 调用并在特定于环境的数据源配置中维护它变得非常混乱。

有人可以告诉我上述问题的更强大和更清洁的替代方案吗?

提前致谢!!

【问题讨论】:

    标签: node.js typescript loopbackjs loopback4


    【解决方案1】:

    在数据源配置中使用环境变量

    数据源配置只是一个导入到*.datasource.ts 中的 JSON 文件。因此,您可以将该 JSON 文件替换为 Typescript 文件并相应地导入它。 LoopBack 4 不提供任何自定义变量替换机制。相反,建议使用process.env

    最近的 CLI 版本替换了 JSON 配置以支持使用单个 Typescript 文件:

    import {inject} from '@loopback/core';
    import {juggler} from '@loopback/repository';
    
    const config = {
      name: 'db',
      connector: 'memory',
    };
    
    export class DbDataSource extends juggler.DataSource {
      static dataSourceName = 'db';
      static readonly defaultConfig = config;
    
      constructor(
        @inject('datasources.config.db', {optional: true})
        dsConfig: object = config,
      ) {
        super(dsConfig);
      }
    }
    

    构造函数中的依赖注入允许您通过应用程序的 IoC 容器以编程方式覆盖配置。

    进一步阅读

    在没有 REST 连接器的情况下调用外部 API

    REST 连接器强制执行一个定义明确的接口来查询外部 API,以便能够在发出请求之前进行验证。

    如果这不合适,可以创建一个新的Service 作为 HTTP 查询的包装器。从那里,您可以公开自己的函数来处理对外部 API 的请求。由于服务不需要遵循严格的结构,因此可以根据您的用例对其进行自定义。

    也可以使用内置或外部库直接在控制器内部创建新请求。


    总体而言,在 LoopBack 4 中做某些事情并没有 100% 正确或错误的方法。因此,该框架提供了多种方法来解决相同的问题。

    【讨论】:

    猜你喜欢
    • 2011-09-11
    • 2013-05-16
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 2014-03-03
    • 2017-05-20
    • 2013-08-16
    • 2014-04-25
    相关资源
    最近更新 更多