我刚刚开始了我的第一个回送项目,并为应用程序选择了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中不起作用。一种解决方案是将名为mongodb.staging.json和mongodb.production.json的配置文件添加到src/datasources目录中的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调用及其请求参数并在数据源配置中维护这一点变得非常麻烦,这将是特定于环境的。
有人能告诉我一个更健壮、更清洁的解决上述问题的方法吗?
提前谢谢!!
发布于 2020-05-03 00:38:46
在数据源信任中使用环境变量
数据源配置只是一个导入到*.datasource.ts中的JSON文件。因此,您可以用类型记录文件替换该JSON文件,并相应地导入它。LoopBack 4不提供任何自定义变量替换机制。相反,建议使用process.env。
最近的CLI版本取代了JSON配置,转而使用单个类型记录文件:
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%正确或错误的方法来处理某些事情,因此框架提供了许多解决相同问题的方法。
https://stackoverflow.com/questions/61560176
复制相似问题