Как вызвать другой контроллер Loopback4 с другого контроллера? - PullRequest
0 голосов
/ 07 мая 2020

Я прочитал этот вопрос / ответ Как вызвать метод контроллера Loopback4 с другого контроллера ОДНАКО мой вариант использования немного отличается.

В отличие от этого ответа выше, мне НЕОБХОДИМО мой Функции API должны быть доступны через http (и я также не смог получить даже ответ по ссылке выше, чтобы работать).

Мой вариант использования Мне нужно, чтобы мой главный контроллер go и получить все местоположения через 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 голосов
/ 08 мая 2020

Хорошо, после долгих исследований репозиториев Github других приложений Loopback4, я выяснил, как заставить работать другой Stackoverflow ( Как вызвать метод контроллера Loopback4 с другого контроллера ).

Хотя мое исправление технически не вызывает другой контроллер, я могу получить доступ к репозиторию, который использует контроллер (местоположения).

Итак, мне просто пришлось добавить импорт для @repository вверху моего Главный контроллер , вот так:

import {repository} from '@ loopback / repository';

Итак, моя страница Main Controller выглядит так:

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