Как внедрить провайдеров в объект из базы данных typeorm?

#node.js #nestjs #typeorm

Вопрос:

Мне нужно получить ClientProxy в сущности, я делаю это с помощью конструктора, но в конце переменная не определена

Сущность

 constructor(
    @Inject('NAME') private messageClient: ClientProxy
) {
    super();
}
 

если вы отключите переменную messageClient, она будет равна undefined. как внедрить поставщиков в сущность из базы данных typeorm?

Комментарии:

1. Почему вы хотите внедрить что-то в Сущность?

2. Мне нужно, чтобы messageClient.send был отправлен от сущности

3. Но почему? Зачем связывать бизнес-логику с вашим DAO?

4. для того, чтобы склеить свойства, свойства необходимы для дальнейшего поиска по параметрам

5. Я не понимаю, почему ты хочешь это сделать. Добавление бизнес-логики в DAO в значительной степени считается анти-шаблоном.

Ответ №1:

невозможно ли передать clientproxy сущности

Нет, как я уже упоминал, вы могли бы передать его со службы через какой-нибудь сеттер.

Я описываю @AfterLoad() в сущности

Вы можете вместо этого использовать Подписчика сущности, так как он находится в системе NestJS DI.


Лично я по-прежнему предлагаю вам сделать это в службе, а не привязывать логику к вашему объекту доступа к данным. На мой взгляд, DAOS должны быть довольно глупыми и на самом деле должны существовать только для сопоставления сущности базы данных и кода. Если вы продолжите заниматься этим, как я уже сказал, посмотрите, какие подписчики сущности есть у Nest для TypeORM. Хотя вы не можете (и не должны) выполнять инъекцию в саму сущность, поскольку она управляется TypeORM, вы можете работать с подписчиком.