Выбор ответа Middle HTTP-сервер, Express, NestJS обновлено
Состояние в сервисе NestJS
Вопрос
Что не так с этим сервисом NestJS?
@Injectable()
export class CartService {
private userId: string;
setUser(id: string) { this.userId = id; }
async total() { return this.repo.sumFor(this.userId); }
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Провайдер синглтон: запросы перезапишут userId друг другу. По умолчанию провайдер в NestJS создаётся один раз на всё приложение.
Варианты ответа
- Ничего, у каждого запроса свой экземпляр сервиса
- Провайдер синглтон: запросы перезапишут
userIdдруг другуправильный ответ - В NestJS нельзя объявлять private-поля в провайдерах
@Injectableзапрещает async-методы без@Async
Разбор
По умолчанию провайдер в NestJS создаётся один раз на всё приложение. Пока один запрос ждёт await, другой вызовет setUser, и первый посчитает чужую корзину. Данные запроса передают аргументами (или используют request scope, который дороже).
- Отдельный экземпляр на запрос даёт только
Scope.REQUEST, его нужно включать явно. - Private-поля и async-методы разрешены.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.