如何从另一个控制器调用另一个Loopback4控制器?

时间:2020-05-07 18:47:39

标签: loopback4

我已经阅读了此问题/答案How to call Loopback4 controller's method from another controller,但是,我的用例略有不同。

与上面的答案不同,我确实需要通过http访问我的API函数(而且我也无法在上面的链接中获得答案才能正常工作)。

我的用例 我需要我的主控制器通过iciService来获得所有位置(这一切都很好并且可以正常工作),然后我需要将所有位置数据插入另一个数据源(mongoDB)中,我相信通过导入位置控制器就可以了?但是我不确定到底是什么。

我已经对此进行了研究,但不清楚。我不是一个强大的程序员。

这是我的主控制器代码:

import { inject } from '@loopback/context';
import { iciService } from '../services/ici.service';
import { get, param } from '@loopback/rest';

export class iciController {
  constructor(
    @inject('services.ici')
    private iciService: iciService
  ) {}

  @get('/locations')
  getall() {
    return this.iciService.getLocations();
  }
}

这是我需要链接到的位置控制器

import {
  Count,
  CountSchema,
  Filter,
  FilterExcludingWhere,
  repository,
  Where,
} from '@loopback/repository';
import {
  post,
  param,
  get,
  getModelSchemaRef,
  patch,
  put,
  del,
  requestBody,
} from '@loopback/rest';
import {Location} from '../models';
import {LocationRepository} from '../repositories';

export class LocationController {
  constructor(
    @repository(LocationRepository)
    public locationRepository : LocationRepository,
  ) {}

  @post('/locations', {
    responses: {
      '200': {
        description: 'Location model instance',
        content: {'application/json': {schema: getModelSchemaRef(Location)}},
      },
    },
  })
  async create(
    @requestBody({
      content: {
        'application/json': {
          schema: getModelSchemaRef(Location, {
            title: 'NewLocation',

          }),
        },
      },
    })
    location: Location,
  ): Promise<Location> {
    return this.locationRepository.create(location);
  }
}

1 个答案:

答案 0 :(得分:0)

好,在对其他Loopback4应用程序的Github存储库进行了大量研究之后,我发现可以使其他Stackoverflow发挥作用(How to call Loopback4 controller's method from another controller)。

尽管从技术上讲,我的修复程序不会调用另一个Controller,但我仍可以访问Controller(位置)使用的存储库。

因此,我只需要在主控制器的顶部为@repository添加导入,就像这样:

从“ @ loopback /存储库”导入{存储库};

所以我的主控制器页面如下:

import { inject } from '@loopback/context';
import { repository } from '@loopback/repository';
import { iciService } from '../services/ici.service';
import { get, param } from '@loopback/rest';

export class iciController {
  constructor(
    @inject('services.ici')
    private iciService: iciService,

    @repository(JobRepository)
    private jobRepository: JobRepository,
  ) {}

  @get('/locations')
  getall() {

    //NOW YOU CAN ACCESS THE FUNCTIONS IN THE jobRepository
    return this.jobRepository.count();
  }
}