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