【问题标题】:How to call another Loopback4 Controller from another Controller?如何从另一个控制器调用另一个 Loopback4 控制器?
【发布时间】:2020-05-07 18:47:39
【问题描述】:

我已阅读此问题/答案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);
  }
}

【问题讨论】:

标签: loopback4


【解决方案1】:

好的,在对其他 Loopback4 应用程序的 Github 存储库进行大量研究之后,我想办法让其他 Stackoverflow 工作 (How to call Loopback4 controller's method from another controller)。

虽然我的修复在技术上并未调用另一个控制器,但我能够访问控制器(位置)使用的存储库。

所以,我只需要在我的 主控制器 顶部添加 @repository 的导入,如下所示:

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

所以我的主控制器页面看起来像:

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();
  }
}

【讨论】:

    猜你喜欢
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    相关资源
    最近更新 更多