NestJS и вот к чему я смог прийти: Nest), которые нужны по всему проекту я кладу в папку common, примерами таких модулей могут служить некоторые DTO; сущности/модели; глобальные гарды и тд;/src, но, например, у меня на работе в проекте все модули лежат в папке modules, что, в принципе, тоже неплохо.auth находятся папки: dto, services (если в модуле больше одного сервиса, то я создаю для них отдельную папку), если сервис один, то кладу его в корень папки модуля.Auth), который будет делать вам токены.snake-case. Примеры: email-confirmation.service.ts, update-user.dto.ts. То же самое относится и к директориям. Request и Response в GraphQL, вы должны добавить эту строчку в конфигурацию GraphQLModule.GraphQLModule.forRoot({
autoSchemaFile: join(process.cwd(), 'src/schema/gql'),
sortSchema: true,
driver: ApolloDriver,
context: ({ req, res }) => ({ req, res }), // <-----
})CORS в GraphQL включается по-другому.@Global()
@Module({
imports: [
ConfigModule.forRoot({}),
JwtModule.registerAsync({})
Reflector,
],
providers: [ConfigService, JwtService, Reflector],
exports: [ConfigService, JwtService, Reflector],
})
export class CommonModule {} req.authService? Вместо req должен быть this так-то.@Public и помечать ими те эндпоинты, которые не требуют аутентификации./auth/login? Выберите что-то одно.authService как readonly. delete admin.password, вместо этого воспользуйтесь class-transformer и SerializerInterceptor как тут.nestjs-typegoose устарел и больше не поддерживается. Более того, там есть один критический недостаток. Я сделал свою обёртку для Typegoose в рамках NestJS.У меня есть ссылка вида example.ru/mail/confirm?token=123
?token - это query параметр, а не обычный, который идет после /@Get('mail/confirm/:token') либо вместо @Param() используйте @Query()exports: []@Module({
imports: [
TypeOrmModule.forFeature([UserEntity, ForgotEntity]),
],
controllers: [UserController],
providers: [UserService],
exports: [UserService] // Экспортируем зависимости данного модуля.
})
export class UserModule{}@Module({
imports: [
TypeOrmModule.forFeature([PaymentsEntity]),
UserModule // Импортируем его сдесь. Теперь в пределах данного модуля нам доступен UserService.
],
controllers: [PurchaseController],
providers: [PurchaseService]
})
export class PurchaseModule {}/items@Controller('/items')getAll, и делаете это с помощью декоратора @Response, но в Nest, как только вы получаете доступ к объекту ответа, всё управление ответом передаётся вам, а значит вы должны вызвать res.end() или res.json() чтобы завершить запрос.@Param, а параметры это вообще про другое — вам нужен @Body()