@eugenedrvnk

Передавать «request» в сервис — плохая практика?

Я пытаюсь обработать процесс авторизации в приложении, и в разных контроллерах мне нужно записать идентификатор пользователя в сессию. Обычный способ - сделать что-то вроде этого:
@Get('callback')
  handleCallback(
    @Req() req,
  ) {
    const userId = this.authService.loginUser();
    req.session.userId = userId;
  }

Но мне приходится дублировать этот код во многих контроллерах, поэтому я хочу вынести его в какую-то отдельную часть кода, может быть что-то вроде этого:
@Injectable()
export class SessionService {
  write(req, userId: number) {
    req.session.userId = userId;
  }

  read(req) {
    return req.session.userId;
  }
}


Нормальная ли практика передавать объект запроса непосредственно сервису? Или это должен быть не сервис, а, может быть, хелпер или ещё что-то? Или мне просто нужно продублировать эту логику во всех контроллерах?
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 2
@denisromanenko
А вы не можете миддлвар навесить, который будет это делать в любом случае для запроса?
Ответ написан
Комментировать
@justmavi
Software Development Engineer at Softconstruct
Можно инжектировать объект запроса в конструкторе

import { Inject } from '@nestjs/common';
import { REQUEST } from '@nestjs/core';

@Injectable()
export class SessionService {
  constructor(@Inject(REQUEST) private readonly req: Express.Request) {};

  write(userId: number) {
    this.req.session.userId = userId;
  }

  read() {
    return this.req.session.userId;
  }
}


Но вашу проблему можно легко решить через guard'ы.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы