I have a loopback 4 controller with a function that I don't want to expose via HTTP. I would like to be able to call the function from another controller.
How can I do this? Is there any way of injecting a controller in another controller? (I 'm able to inject repositories in controllers, but not controllers in other controllers).
I have a loopback 4 controller with a function that I don't want to expose via HTTP. I would like to be able to call the function from another controller.
How can I do this? Is there any way of injecting a controller in another controller? (I 'm able to inject repositories in controllers, but not controllers in other controllers).
Share Improve this question edited Jun 1, 2019 at 18:35 nassim 1,5531 gold badge15 silver badges28 bronze badges asked Jun 1, 2019 at 17:08 DinisDinis 511 silver badge5 bronze badges3 Answers
Reset to default 5You have to first import repository of another controller e.g.
import { MemberRepository, EmailTemplateRepository } from '../repositories';
then you have to inject it in constructor like this:-
@repository(EmailTemplateRepository) public emailTemplateRepository: EmailTemplateRepository,
then after you can use any function of controller like this:-
const template = await this.emailTemplateRepository.findOne({
where: {
slug: 'user-password-reset',
status: 1
}
});
Answer is here: https://github./strongloop/loopback-next/issues/3028
@inject(‘controllers.AnotherController’) c: AnotherController
Ok I figured out how to make this work. You have to import the @repository ponent where the rest of the other import statements are, like so:
import { repository } from '@loopback/repository';
Adding this, will allow for, @repository(EmailTemplateRepository) public emailTemplateRepository: EmailTemplateRepository, to work.