在loopback4应用中对数据源进行特定环境配置。

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

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

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

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

https:/loopback.iodocenlb3Environment-specific-configuration.html#data-source-configuration。

在lb4中无法使用。一个解决方案是添加配置文件,名字为 mongodb.staging.jsonmongodb.production.json 同样的,也适用于目录中的redis和rest数据源。src/datasources然后根据NODE_ENV变量使用if条件加载这个配置,并将其传递给datasource的构造函数。它可以工作,但似乎不太好,因为这应该是应用程序的责任。

谁能给我提供一个相当于lb3的解决方案?

2. 通过datasource调用外部API。 在lb4中,为了调用外部服务,建议有一个单独的基于REST的数据源和它的服务,通过控制器来调用它。现在,在REST数据源配置中,必须定义一个所有API调用的模板,它将发生在外部服务上。https:/loopback.iodocenlb4REST-connector.html#定义一个使用模板的自定义方法。.

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

谁能告诉我一个更强大和更干净的替代方案来解决上述问题?

先谢谢你!

node.js typescript loopbackjs loopback loopback4
1个回答
0
投票

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

数据源配置是一个简单的JSON文件,它被导入到了 *.datasource.ts. 因此,你可以用Typescript文件替换该JSON文件,并据此导入。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,以便能够在发送请求之前进行验证。

如果这一点不利,可以创建一个新的 服务项目 作为HTTP查询的封装器。从那里,你可以暴露你自己的函数来处理对外部API的请求。由于服务不需要遵循一个严格的结构,因此可以根据你的使用情况进行定制。

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


总的来说,在LoopBack 4中并没有100%正确或错误的方式来做某些事情。因此,为什么框架提供了许多方法来解决同样的问题。

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