在 Loopback 4 中使用服务

Use services in Loopback 4

摘要

如何使用 Loopback 4 服务生成器和创建本地服务 class 来处理 *.repository*.controller

之外的数据

详细

我正在开发一个需要外部 API 来获取数据的系统,复杂 hashing/encryption 等不属于控制器范围或存储库范围(为了干净的代码)。 Loopback 4 有 CLI 命令 lb4 service 来生成 service 并且这没有很好的记录。如何在 /service 文件夹中创建一个 class 并导入(或注入或绑定或其他)并像我们处理存储库一样使用它的方法?

例如:

从类似 this.PasswordService.encrypt('some text') 的服务中调用方法 this.TwitterApiService.getTweets()/service 目录中定义

好的,这是我自己想出来的。我将按照我遵循的步骤对此进行解释。

  1. 创建文件夹 /src/service 并在其中创建 myService.service.tsindex.tscontrollerrepository 等相同(或使用 lb4 service 和 select local service class)。注意:如果要实现接口,可以。

  2. 使用BindingKey.create()方法创建绑定密钥。

export const MY_SERVICE = BindingKey.create<ServiceClass>('service.MyService');

ServiceClass 可以是 class 或接口。

  1. 转到 application.ts 并将密钥(此处 service.MyService)绑定到服务 class.
export class NoboBackend extends BootMixin(
  ServiceMixin(RepositoryMixin(RestApplication)),
) {
  constructor(options: ApplicationConfig = {}) {
    super(options);
    ...

    //add below line
    this.bind('service.MyService').toClass(ServiceClass);

    //and code goes on...
    ...
}
  1. 将服务注入您想要的class。这里我注入一个控制器
export class PingdController {
  constructor(
    @inject(MY_SERVICE ) private myService: ServiceClass,
  ) {}
  ...
  ...
}

现在您可以像 this.myService.getData(someInput)...!!!

一样访问您的服务