Я пытаюсь создать приложение с помощью mikro-orm и apollo-server-express, я хочу использовать пакетную обработку и кеширование загрузчика данных Facebook.

Обычно экземпляры загрузчика данных Facebook создаются для каждого запроса. Если mikro-orm также создает пользовательские экземпляры репозитория для каждого запроса и если все вызовы EntityManager.getRepository() в одном запросе получают один и тот же экземпляр, это может быть идеальным местом для создания экземпляров загрузчика данных.

3
xeladejo 2 Апр 2019 в 21:40

1 ответ

Лучший ответ

Репозитории создаются как синглтоны, поэтому для каждого экземпляра EntityManager существует только один экземпляр. Вы должны выполнить форк этого EM, чтобы иметь один экземпляр для каждого запроса, вручную или через промежуточное ПО RequestContext:

https://b4nan.github.io/mikro-orm/identity-map/

Таким образом, каждый запрос будет иметь свой собственный EntityManager, который будет иметь свой собственный кеш экземпляров репозитория.

Имейте в виду, что если вы используете RequestContext, вы должны получить от него конкретный запрос EntityManager и получить оттуда репозиторий:

// beware that this will return null if the context is not yet started
const em = RequestContext.getEntityManager();

// gets request specific repository instance
const repo = em.getRepository(Book);
2
Martin Adámek 3 Апр 2019 в 08:27