Вопросы с тегами [nestjs]

0

голосов
1

ответ
9

Просмотры

Зависимости Разрешая Nestjs косяка

Не могу понять, в чем проблема моего кода. (Я новичок с nestjs, я пытаюсь узнать его, передавая некоторые приложения к нему). Журнал консоль говорит: Гнездо не может решить зависимости в UrlsAfipService (?). Пожалуйста, убедитесь, что аргумент с индексом [0] доступен в контексте ApiModule. UrlsAfipService импорт {инъекционные} из @ nestjs / общий "; импорт {AfipUrls} из @Injectable»./urls' () экспорт класса UrlsAfipService {конструктор (частный afipUrls только для чтения: AfipUrls,). {} getWSAA () {вернуться this.afipUrls.homo () wsaa; //
Marcelo J Forclaz
1

голосов
0

ответ
322

Просмотры

Broadcast сообщение между nest.js microservices

Я использую Redis в качестве транспорта для microservices связи. Каждый @MessagePattern контроллер создает два Redis канала _ack для публикации сообщений и _res для ответа на это сообщение. Клиент, который отправляет сообщение - пивная его в _ack канала и ждать ответ, слушая _res канала. Когда ответ получает через _res канал мы получаем в этом пакете «расположенный: истинный» Вопрос: Если я создаю 3 microservices (разные серверы). Два из них будут иметь один и тот же @MessagePattern и третий будет отправить сообщение по этому шаблону. Это некоторые, как широковещательные сообщения. Будет ли правильно быть отправителем обработки как ответ от _res канала? Есть правильный путь для использования nestjs транспорта для вещания?
Breit Smiley
1

голосов
0

ответ
178

Просмотры

Nestjs microservices с таможенным транспортом, что о контроллерах?

я любил эти рамки, но у меня есть вопрос, что о контроллерах при использовании настраиваемого транспорта для mictroservices? я имею в виду, я могу использовать обычный TCP транспорт для контроллеров в моих модулях, а также использовать пользовательский транспорт, определенный мною? Я хочу использовать пользовательские транспортный сервер в моих microservices, но я чувствую, что рамки освобождаются или я не знаю, как использовать контроллеры в этой установке; для объяснить это лучше я хочу, чтобы мои microservices общаться, используя иногда как WebSockets, но я хочу, чтобы получить доступ к microservices с помощью контроллеров TCP, поэтому лучшей формой является создание двух приложений в main.ts? один с моим настраиваемым транспортом (без контроллеров), а другим с использованием протокола TCP транспортом (с контроллерами, услуги и т.д.)? А также что цель загрузки модуля в microservice с помощью настраиваемого транспорта, если не будет контроллеров, которые могут использовать транспорт? Документация не ясно об этом.
1

голосов
1

ответ
532

Просмотры

Как добавить NestJS к существующему угловому проекту без двух node_modules, разделенных?

У меня есть Угловой проект, который, получая данные от Google Firestore. Все понятно и работает. Теперь я хочу, чтобы перейти от Firestore к собственной базе данных MySQL, с NestJS и TypeORM. При добавлении вложенной папки, например «сервер», создавая новый проект гнезда с CLI гнезда внутри, это тоже работает, но я получил два node_modules папки, один для углового проекта и один для проекта Nest под «сервером». Как я могу использовать один node_modules папку для обоих? Большинство примеров, которые я нашел либо для углового проекта или автономного Nest проекта, лишь немногие из них обоих проектов, но я не получаю волшебство за ними. Может кто-нибудь дать мне подсказку, пожалуйста? Заранее спасибо, Роберт
sagerobert
1

голосов
1

ответ
375

Просмотры

Гнездо не может разрешить зависимости для (декоратор Guard) AuthGuard

У меня есть AuthGuard, которые проверяют маркер JWT в контроллерах. Я хочу использовать эту гвардию в контроллерах для проверки подлинности. Я эту ошибку: Гнездо не может разрешить зависимости для AuthGuard (, +?). Пожалуйста, убедитесь, что аргумент с индексом [0] доступен в текущем контексте. TestController.ts импорт {Controller, пост, тело, HttpCode, HttpStatus, UseInterceptors, UseGuards} из "@ nestjs / общий"; импорт {TestService} из "Услуги / TestService"; импорт {CreateTestDto} из "DTOS / CreateTestDto"; импорт {ApiConsumes, ApiProduces} из "@ nestjs / чванство"; импорт {} AuthGuard от "гвардейского / AuthGuard"; @Controller ( "/ тесты") @UseGuards (AuthGuard) экспорт класс TestController {конструктор (частный TestService только для чтения: TestService, ) {} @Post ( "/ создать") @HttpCode (HttpStatus.OK) @ApiConsumes ( "приложения / JSON") @ApiProduces ( "Применение / JSON") асинхронной создать (@body () createTestDto: CreateTestDto): Promise { // this.testService.blabla (); }} AuthGuard.ts импорт {CanActivate, ExecutionContext, инъекционные} из "@ nestjs / общий"; импорт {AuthService} из "Услуги / AuthService"; импорт {UserService} из "Услуги / UserService"; @Injectable () экспорт класс AuthGuard реализует CanActivate {конструктор (частный authService: только для чтения AuthService, частные чтения UserService: UserService,) {} асинхронной canActivate (dataOrRequest, контекст: ExecutionContext): Promise {попробуйте {// код здесь возвращает истину; } Поймать (е) {вернуться ложным; }}}
pirmax
1

голосов
0

ответ
303

Просмотры

Nest.JS использовать AuthGuard в качестве промежуточного программного обеспечения для GraphQL

Я пытаюсь сделать обеспечить мою GraphQL конечную точку passportJS для того, чтобы каждый вызов этой конечной точке использует AuthGuard для проверки маркера и настройки пользователя на request.user, так же, как это делает в контроллере с этим кодом: @Get ( 'FindAll') @UseGuards (AuthGuard ( 'JWT')) FindAll (@Req () запрос): Promise {вернуть this.thingService.findByUser (request.user.email); } Дело в том, что я хочу, чтобы использовать его в конечной точке graphQL, которая создается следующим образом: потребитель .Не (graphiqlExpress ({endpointURL: '/ graphql'})) .forRoutes ( '/ graphiql') .Не (graphqlExpress (REQ ? => ({схемы, rootValue: REQ})), ¿,) .forRoutes ( '/ graphql'); Я полагаю, я могу просто установить его как функцию промежуточного слоя после функции graphqlExpress, но я не был успешным. Какие-нибудь мысли? Заранее спасибо! Редактировать В качестве обходного пути я реализовал решение, предложенное на Nest Docs, где он использует @UseGuard в каждом запросе / мутации, которые должны быть защищены. Тем не менее, я хочу, чтобы защитить всю конечную точку, так что охранник не вызывается для каждого защищенного распознаватель, но только один раз на главном запросе. Является ли это вообще возможно?
Robert Mengual
1

голосов
0

ответ
191

Просмотры

NestJs получить запрос экземпляр или контекст выполнения в валидаторе (класс валидатор)

Можно ли вводить контекст выполнения или доступа текущего запроса в nestJs (класс-валидатор => валидатора)? импорт {ValidatorConstraint, ValidatorConstraintInterface, ValidationArguments} из 'класса-валидатор'; импорт {} инъекционные от '@ nestjs / общий'; импорт {Connection} от 'typeorm'; импорт {InjectConnection} от '@ nestjs / typeorm'; @ValidatorConstraint ({имя: 'modelExistsConstraint', асинхронный: истинный}) @Injectable () экспорт класс ModelExistsConstraint реализует ValidatorConstraintInterface {конструктор (@InjectConnection ( 'по умолчанию') частное подключение только для чтения: подключение,) {} асинхронной Validate (значение: строка, validationArguments: ValidationArguments) {// здесь нужен запрос или контекст исполнения; // Const тест = this.context.switchToHttp () GetRequest (). Const модель = ждут this.connection .getRepository (validationArguments.constraints [0]) .findOne ({где: {[validationArguments.property]: значение}}); вернуть модель!; } defaultMessage (арг: ValidationArguments) {возвращение `Модель с "$ {args.property}" - "$ {args.value}" уже exists`; }}
user2623505
1

голосов
3

ответ
1.6k

Просмотры

NestJS Authentication JWT-паспорт

Я хочу, чтобы реализовать распространяемую библиотеку аутентификации использовать его на некоторых из моих проектов. Библиотека должна использовать метод аутентификации JWT. Код выглядит следующим образом: jwt.strategy.ts: импорт {ExtractJwt, стратегия} от 'паспорта-JWT'; импорт {PassportStrategy} из @ nestjs / паспорт "; импорт {} инъекционные от '@ nestjs / общий'; импорт {JwtPayload, Пользователь} от»./interfaces'; импорт {ConfigService} из "./config.service"; @Injectable () экспорт класс JwtStrategy расширяет PassportStrategy (Стратегия 'JWT') {Конструктор (частный ConfigService только для чтения: ConfigService) {супер ({jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken (), secretOrKey: configService.get ( 'secretOrPrivateKey')}) ; } Асинхронной проверки (полезная нагрузка: JwtPayload): Promise {возвращение {UUID: payload.uuid, электронная почта: payload.email,}}} jwt.auth.module.ts: импорт {Module, DynamicModule} от '@ nestjs / общий'; импорт {JwtModule} от '@ nestjs / JWT'; импорт {JwtStrategy} от './jwt.strategy'; импорт {PassportModule} из @ nestjs / паспорт "; импорт {ConfigService} из "./config.service"; импорт {JwtOptions} из "./interfaces/jwt.options"; @Module ({}) экспорт класс JwtAuthModule {статический forRoot (jwtOptions): DynamicModule {возвращение {модуль: JwtAuthModule, импорт: [// JwtModule.register (jwtOptions), // PassportModule.register ({defaultStrategy: 'JWT'}) ,], провайдеры: [JwtStrategy, {обеспечивают: ConfigService, useValue: новый ConfigService (jwtOptions), }], Экспорт: [ConfigService, JwtStrategy]}; }} И я импортировал это в моем app.module.ts: импорт {Module, NestModule, HttpModule} от '@ nestjs / общих'; импорт {MongooseModule} от '@ nestjs / Мангуст'; импорт {среда} из»./environments'; импорт {AuthModule} от './auth/auth.module'; импорт {PermissionModule} от './permission/permission.module'; импорт {JwtAuthModule} из @ PE / гнездо-комплект '; импорт {JwtModule} от '@ nestjs / JWT'; импорт {PassportModule} из @ nestjs / паспорт "; @Module ({импорт: [JwtModule.register (environment.jwtOptions), PassportModule.register ({defaultStrategy: 'JWT'}), JwtAuthModule.forRoot (environment.jwtOptions), HttpModule, AuthModule, PermissionModule, MongooseModule.
CountZero
1

голосов
1

ответ
224

Просмотры

Firebase - Обрабатывать облака события в NestJS Framework

Я использую NestJS как мой бэкэнда Framework и Firebase. Для того, чтобы интегрировать гнездо с Firebase по HTTP запросов просто, как присоединение экспресса экземпляра гнезда к Firebase: Const Сервер: Экспресс = экспресс (); Const самозагрузка = асинхронный (expressInstance: Экспресс) => {константные приложение = ждет NestFactory.create (AppModule, expressInstance); ОЖИДАНИЕ app.listen (3000); ОЖИДАНИЕ app.init (); }; самонастройки (сервер); exports.api = functions.https.onRequest (сервер); Но как насчет других функций Google (например, PubSub, FireStore, Auth и т.д.)? Я строй подписки приложения, и я завишу от functions.pubsub проверить в конце каждый день, подписки я должны взимать плату. Это требует написания бизнес-логики, что я хочу написать жгутов NestJs. Я пытаюсь добиться чего-то вроде этого (в двух словах): functions.pubsub .topic (»
Eliya Cohen
1

голосов
1

ответ
80

Просмотры

Вы можете использовать FileInterceptor с TransformPipe

Я встретил вопрос с TransformPipe - он работает до тех пор, пока я не использовать FileInterceptor. Так как мне нужно обе функциональные возможности это меня смутило. Я создал вопрос на Github, но Kamil писал о нем, что это нормальная структура поведения. Ни я, ни мои друзья, не нашел какие-либо ссылок на это «нормальное» поведение в официальной документации. Есть ли у вас какие-либо идеи? Код здесь: Контроллер @UsePipes (SamplePipe) @UseInterceptors (FileInterceptor ( 'файл')) (файл @UploadedFile ()) @post () samplePost {возвращение файла} Труба @Injectable () экспорт класс SamplePipe реализует PipeTransform {преобразование (значение : любой, метаданные: ArgumentMetadata) {console.log ( "Я работаю") возвращает значение; }}
hypeofpipe
1

голосов
0

ответ
120

Просмотры

NestJS Как добавить пользовательский Logger обыкновения ExceptionFilter

Я использую NestJS 5.4.0 У меня есть пользовательский LoggerService, он прекрасно работает. Но, как я могу добавить LoggerService к ExceptionFilter. // logger.service.ts импортирования {инъекционные, LoggerService} от '@ nestjs / общий'; @Injectable () экспорт класса Logger реализует LoggerService {журнал (сообщение: строка) {console.log (сообщение); } Ошибка (сообщение: строка, след: строка) {console.error (сообщение); } Предупреждают (сообщение: String) {console.warn (сообщение); }} {//Logger.module.ts импорт модуля} из @ nestjs / общий "; импорт {} Logger от '../services/logger.service'; @Module ({провайдеры: [Logger], экспорт: [Logger],}) экспорт класс LoggerModule {} // user.module.ts импорт {Module} из @ nestjs / общий "; импорт {UserService} от '../services/user.service'; импорт {LoggerModule} от './logger.module'; @Module ({импорт: [LoggerModule], провайдеры: [UserService], экспорт: [UserService]}) экспорт класс UserModule {} Это отлично работает. импорт {} Logger от './logger.service'; экспорт класс UserService {конструктор (частный регистратор: Logger) {} частный тест = () => {this.logger.log ( "тест"); // журнал успеха «тест» на консоль}} Но как я могу добавить свой собственный Logger для ExceptionFilter // forbidden.exception.filter.ts импорта {HttpException, HttpStatus, инъекционные} из @ nestjs / общий "; @Injectable () экспорт класс ForbiddenException расширяет HttpException {конструктор (сообщение ?: строка) {супер (сообщение || 'Запрещенный', HttpStatus.FORBIDDEN); // Я хочу, чтобы добавить свой собственный регистратор здесь!
1

голосов
0

ответ
128

Просмотры

Как справиться с NestJS Dependency Injection при расширении класса для службы?

Я пытаюсь обеспечить различные услуги на основе значения из моего ConfigService. Проблема я бегу в том, что модель мангуст, которая получает инъекции не возвращает никаких значений при выполнении запроса методов, таких как findOne () (результат нулевой) или countDocuments () (результат 0). Мои классы обслуживания определяются следующим образом: экспорт класса BaseService {конструктор (@InjectModel ( 'Cat') публичное catModel только для чтения: Model) {} CreateService (опция: строка) {если (опция === 'OTHER') {возвращение нового OtherService (this.catModel); } Еще если (опция === 'ДРУГОЙ') {возвращают новый AnotherService (this.catModel); } Еще {возвратить новый BaseService (this.catModel); }} Асинхронной findOne (ID: строка): Promise {возвращение ждут this.catModel.findOne ({_ ID: идентификатор}); } Асинхронной рассчитывать (): Promise {возвращение ждут this.catModel.countDocuments (); } TestClass () {console.log ( 'барщина класс, используемый'); }} @Injectable () экспорт класс OtherService расширяет BaseService {конструктор (@InjectModel ( 'Cat') публичное catModel только для чтения: модели) {супер (catModel); } TestClass () {console.log ( 'ДРУГИЕ УСЛУГИ КЛАСС ИСПОЛЬЗУЕМЫЕ'); }} @Injectable () экспорт класс AnotherService расширяет BaseService {конструктор (@InjectModel ( 'Cat') публичное catModel только для чтения: модели) {супер (catModel); } TestClass () {console.log ( 'Еще одна услуга, класс, используемый'); }} Это позволяет мне получить правильную услугу у провайдера (TestClass () печатает ожидаемую строку). Мой провайдер выглядит следующим образом: экспорт константного catProviders = [{обеспечить: 'CatModelToken', useFactory: (подключение: Соединение) => connection.model ( 'CAT', CatSchema), вводят: [ 'DbConnectionToken']}, {обеспечивают: 'BaseService', useFactory: (ConfigService: ConfigService, подключение: подключение) => {сопз варианты = ConfigService .get ( 'service_type'); пусть модель = connection.model ( 'CAT', CatSchema); вернуть новый BaseService (модель) .createService (варианты); }, Впрыснуть: [ConfigService, 'CatModelToken', 'DbConnectionToken'],}]; Поэтому мой вопрос состоит из двух частей: Есть ли лучший способ справиться с созданием соответствующего класса и, чтобы избежать необходимости создания экземпляра BaseService с единственной целью вызова CreateService ()? Что такое правильный способ, чтобы придать модели мангуста во вновь созданной службе? Я также не могу использовать пример useClass из документации,
cameronliam
1

голосов
0

ответ
241

Просмотры

Nest.js аутентификация с использованием typeORM

Я создал работающий сервер с подключением к базе данных, с простым запросом GET, который работает. я следовал https://docs.nestjs.com/techniques/authentication этого руководства. при запуске сервера и пытается выполнить запрос получить от охраняемого маршрута, я получить не могу прочитать свойство «вызов» неопределенной. user.controller.ts импорт {контроллер, Get UseGuards} из @ nestjs / общий "; импорт {UserService} от './user.service'; импорт {User} от './user.entity'; импорт {AuthGuard, PassportModule} из @ nestjs / паспорт "; @Controller () экспорт класс UserController {конструктор (частный UserService только для чтения: UserService) {} @Get ( 'пользователь') @UseGuards (AuthGuard ()) FindAll (): Promise {вернуться this.userService.findAll (); } @Get ( 'пользователи') находят (): Promise {вернуть this.userService.findAll (); }} {Auth.module.ts импорт модуля} из @ nestjs / общий "; импорт {AuthService} от './auth.service'; импорт {HttpStrategy} от './http.strategy'; импорт {UserModule} из 'базы данных / организаций / пользователя / user.module'; импорт {PassportModule} из @ nestjs / паспорт "; Const passportModule = PassportModule.register ({defaultStrategy: 'носителем'}); @Module ({импорт: [passportModule, UserModule], провайдеры: [AuthService, HttpStrategy], экспорт: [passportModule]}) экспорт класс AuthModule {} также при запуске сервера я получаю предупреждение [AuthGuard] Для того, чтобы использовать " defaultStrategy», пожалуйста, убедитесь, чтобы импортировать PassportModule в каждом месте, где используется AuthGuard (). В противном случае паспорт не будет работать правильно. userService.findAll (); }} {Auth.module.ts импорт модуля} из @ nestjs / общий "; импорт {AuthService} от './auth.service'; импорт {HttpStrategy} от './http.strategy'; импорт {UserModule} из 'базы данных / организаций / пользователя / user.module'; импорт {PassportModule} из @ nestjs / паспорт "; Const passportModule = PassportModule.register ({defaultStrategy: 'носителем'}); @Module ({импорт: [passportModule, UserModule], провайдеры: [AuthService, HttpStrategy], экспорт: [passportModule]}) экспорт класс AuthModule {} также при запуске сервера я получаю предупреждение [AuthGuard] Для того, чтобы использовать " defaultStrategy», пожалуйста, убедитесь, чтобы импортировать PassportModule в каждом месте, где используется AuthGuard (). В противном случае паспорт не будет работать правильно. userService.findAll (); }} {Auth.module.ts импорт модуля} из @ nestjs / общий "; импорт {AuthService} от './auth.service'; импорт {HttpStrategy} от './http.strategy'; импорт {UserModule} из 'базы данных / организаций / пользователя / user.module'; импорт {PassportModule} из @ nestjs / паспорт "; Const passportModule = PassportModule.register ({defaultStrategy: 'носителем'}); @Module ({импорт: [passportModule, UserModule], провайдеры: [AuthService, HttpStrategy], экспорт: [passportModule]}) экспорт класс AuthModule {} также при запуске сервера я получаю предупреждение [AuthGuard] Для того, чтобы использовать " defaultStrategy», пожалуйста, убедитесь, чтобы импортировать PassportModule в каждом месте, где используется AuthGuard (). В противном случае паспорт не будет работать правильно. }} {Auth.module.ts импорт модуля} из @ nestjs / общий "; импорт {AuthService} от './auth.service'; импорт {HttpStrategy} от './http.strategy'; импорт {UserModule} из 'базы данных / организаций / пользователя / user.module'; импорт {PassportModule} из @ nestjs / паспорт "; Const passportModule = PassportModule.register ({defaultStrategy: 'носителем'}); @Module ({импорт: [passportModule, UserModule], провайдеры: [AuthService, HttpStrategy], экспорт: [passportModule]}) экспорт класс AuthModule {} также при запуске сервера я получаю предупреждение [AuthGuard] Для того, чтобы использовать " defaultStrategy», пожалуйста, убедитесь, чтобы импортировать PassportModule в каждом месте, где используется AuthGuard (). В противном случае паспорт не будет работать правильно. }} {Auth.module.ts импорт модуля} из @ nestjs / общий "; импорт {AuthService} от './auth.service'; импорт {HttpStrategy} от './http.strategy'; импорт {UserModule} из 'базы данных / организаций / пользователя / user.module'; импорт {PassportModule} из @ nestjs / паспорт "; Const passportModule = PassportModule.register ({defaultStrategy: 'носителем'}); @Module ({импорт: [passportModule, UserModule], провайдеры: [AuthService, HttpStrategy], экспорт: [passportModule]}) экспорт класс AuthModule {} также при запуске сервера я получаю предупреждение [AuthGuard] Для того, чтобы использовать " defaultStrategy», пожалуйста, убедитесь, чтобы импортировать PassportModule в каждом месте, где используется AuthGuard (). В противном случае паспорт не будет работать правильно. @ Nestjs / общий "; импорт {AuthService} от './auth.service'; импорт {HttpStrategy} от './http.strategy'; импорт {UserModule} из 'базы данных / организаций / пользователя / user.module'; импорт {PassportModule} из @ nestjs / паспорт "; Const passportModule = PassportModule.register ({defaultStrategy: 'носителем'}); @Module ({импорт: [passportModule, UserModule], провайдеры: [AuthService, HttpStrategy], экспорт: [passportModule]}) экспорт класс AuthModule {} также при запуске сервера я получаю предупреждение [AuthGuard] Для того, чтобы использовать " defaultStrategy», пожалуйста, убедитесь, чтобы импортировать PassportModule в каждом месте, где используется AuthGuard (). В противном случае паспорт не будет работать правильно. @ Nestjs / общий "; импорт {AuthService} от './auth.service'; импорт {HttpStrategy} от './http.strategy'; импорт {UserModule} из 'базы данных / организаций / пользователя / user.module'; импорт {PassportModule} из @ nestjs / паспорт "; Const passportModule = PassportModule.register ({defaultStrategy: 'носителем'}); @Module ({импорт: [passportModule, UserModule], провайдеры: [AuthService, HttpStrategy], экспорт: [passportModule]}) экспорт класс AuthModule {} также при запуске сервера я получаю предупреждение [AuthGuard] Для того, чтобы использовать " defaultStrategy», пожалуйста, убедитесь, чтобы импортировать PassportModule в каждом месте, где используется AuthGuard (). В противном случае паспорт не будет работать правильно. Стратегия "; импорт {UserModule} из 'базы данных / организаций / пользователя / user.module'; импорт {PassportModule} из @ nestjs / паспорт "; Const passportModule = PassportModule.register ({defaultStrategy: 'носителем'}); @Module ({импорт: [passportModule, UserModule], провайдеры: [AuthService, HttpStrategy], экспорт: [passportModule]}) экспорт класс AuthModule {} также при запуске сервера я получаю предупреждение [AuthGuard] Для того, чтобы использовать " defaultStrategy», пожалуйста, убедитесь, чтобы импортировать PassportModule в каждом месте, где используется AuthGuard (). В противном случае паспорт не будет работать правильно. Стратегия "; импорт {UserModule} из 'базы данных / организаций / пользователя / user.module'; импорт {PassportModule} из @ nestjs / паспорт "; Const passportModule = PassportModule.register ({defaultStrategy: 'носителем'}); @Module ({импорт: [passportModule, UserModule], провайдеры: [AuthService, HttpStrategy], экспорт: [passportModule]}) экспорт класс AuthModule {} также при запуске сервера я получаю предупреждение [AuthGuard] Для того, чтобы использовать " defaultStrategy», пожалуйста, убедитесь, чтобы импортировать PassportModule в каждом месте, где используется AuthGuard (). В противном случае паспорт не будет работать правильно. @Module ({импорт: [passportModule, UserModule], провайдеры: [AuthService, HttpStrategy], экспорт: [passportModule]}) экспорт класс AuthModule {} также при запуске сервера я получаю предупреждение [AuthGuard] Для того, чтобы использовать " defaultStrategy», пожалуйста, убедитесь, чтобы импортировать PassportModule в каждом месте, где используется AuthGuard (). В противном случае паспорт не будет работать правильно. @Module ({импорт: [passportModule, UserModule], провайдеры: [AuthService, HttpStrategy], экспорт: [passportModule]}) экспорт класс AuthModule {} также при запуске сервера я получаю предупреждение [AuthGuard] Для того, чтобы использовать " defaultStrategy», пожалуйста, убедитесь, чтобы импортировать PassportModule в каждом месте, где используется AuthGuard (). В противном случае паспорт не будет работать правильно.
KLTR
1

голосов
1

ответ
86

Просмотры

Как интегрировать инъекции зависимостей с пользовательскими декораторами

Я пытаюсь создать декоратор, который требует инъекций зависимостей. Например: @Injectable () класса UserService {@TimeoutAndCache (1000) асинхронной GetUser (ID: строка): Promise {// Выполнение вызова к БД, чтобы получить все пользователи}} На @TimeoutAndCache возвращает новое обещание, которое выполняет следующее: если вызов занимает больше времени, чем 1000 мс, возвращает отказ и при завершении вызова, он сохраняет в Redis (так что это может быть извлечен в следующий раз). Если вызов занимает менее 1000 мс, просто возвращает результат экспорта Const TimeoutAndCache = функция timeoutCache (TS: число, пространства имен) {журнал функцию возврата (цель: объект, propertyKey: струнные, дескриптор: TypedPropertyDescriptor,) {сопз originalMethod = descriptor.value; // сохранить ссылку на оригинальный метод descriptor.value = функция (... арг: любое []) {// предварительно пусть timedOut = ложь; // запускать и хранить результат константный результат: Promise = originalMethod.apply (это, арг); Const задача = новый Promise ((решительность, отклонять) => {сопз таймер = SetTimeout (() => {если (timedOut) {timedOut = истина;! console.log ( 'тайм-аут до окончания'); отклонять ( 'timedout ');}}, ц); result.then (Рез => {если (timedOut) {// хранить в кэш console.log (' магазин в кэше ');} еще {clearTimeout (таймер); // возвращает результат решимость (RES);}});}); вернуть задачу; }; вернуть дескриптор; }; }; Мне нужно, чтобы ввести RedisService, чтобы сохранить оценочный результат.
Kartik Andalam
1

голосов
0

ответ
66

Просмотры

Получение значения из SYS_REFCURSOR

Можно ли получить значение из SYS_REFCURSOR как текст / VARCHAR? Я пытаюсь получить данные, которые возвращают SYS_REFCURSOR в моем внутреннем интерфейсе:. ОЖИДАНИЕ getManager () запрос ( "SELECT функции (" + 6 + " "+ 2016 +"," + 1 + ") AS VAL FROM DUAL"). затем (Рез => {данных = Рез;}); Что в результате запроса не удалось: SELECT, функция (6, 2016, 1) AS VAL FROM DUAL ошибки: Ошибка: NJS-010: неподдерживаемый тип 2021 данные в колонке 1 Это данные от выполнения функции, которую я пытаюсь преобразовать в текст / VARCHAR: Я попытался заменить возвращаемое значение данных из RETURN SYS_REFCURSOR AS TOTAL SYS_REFCURSOR; в RETURN VARCHAR2 AS TOTAL SYS_REFCURSOR; Результирующая: Ошибка (4,3): PL / SQL: Заявление игнорировали ошибки (4,10): PLS-00382: выражение неправильного типа А я попытался с помощью: SELECT TO_CHAR (функция (6, 2016, 1)) AS VAL FROM DUAL Возврат: ORA-00932: несовместимые типы данных: ожидаемое число получил CURSER 00932. 00000 - " несогласованные типы данных: ожидалось% s получил% s»* Причина: * Действие: Ошибка в строке: 1 колонка: 16 SELECT (функция (6, 2016, 1) .to_string) AS VAL FROM DUAL Возврат: ORA-22806: не объект или REF 22806. 00000 - «не является объектом или REF» * Причина: была сделана попытка извлечь атрибут из элемента, который не является ни объектом, ни REF. * Действие: Используйте тип элемента типа объекта или REF и повторите операцию. Ошибка в строке: 1 Колонка: 9 Если я использую выбрать нормально (SELECT функции (7,2016,1) AS VAL FROM DUAL) он вернется бы: {,} Несколько ссылок я посетил и попробовать: Получение вывода из работы курсоров в PL / SQL Как получить результат REFCURSOR / вывода, чтобы показать, как текст? Oracle Ref курсоры Проверка значений в SYS_REFCURSOR В настоящее время я использую хранимую процедуру запрос, чтобы получить данные. Но можно получить значение из SYS_REFCURSOR как текст / VARCHAR?
Mukyuu
1

голосов
0

ответ
191

Просмотры

NestJS, MongoDB, Mongoose, GraphQL - Repeating myself describing a User or any model

Edit: I implemented below, published it to GitHub for a user auth. Edit based on comment: Can a DTO file be replaced by the classes that @nestjs/graphql generates based on GraphQL types? Can I create a NestJS / MongoDB / Mongoose / GraphQL app by generating these classes, then extending them for my MongoDB Schema. Then, after this question, any best practices opinions are welcomed, but the answer will be accepted that answers the above. Below is the original post: What is the best way to describe a user model? Is it to define the graphQL types and use that to generate classes to replace dto files and import into Mongoose for the MongoDB schema? Below I'll explain what I'm doing, and what may work better. The number of files I have repeating myself doesn't seem to be scalable. Here are the many ways I describe the same user: users.types.graphql - GraphQL types, which contains create user inputs, update user inputs, etc. It contains things such as: type Mutation { createUser(createUserInput: CreateUserInput): User } input CreateUserInput { username: String email: String password: String } type User { _id: String! username: String email: String password: String } user.interfaces.ts - Describes the user type, used by MongoDB Schema and my user.service.ts which contains: export interface IUser { email: string; password: string; username: string; } user.schema.ts - MongoDB Schema. Describes a user to Mongoose. It also extends the user interface in user.interfaces.ts and Document to expose instance methods for strict type checking (I can add .checkPassword to an IUserDocument): export interface IUserDocument extends IUser, Document { checkPassword( password: string, callback: (error?: Error, same?: boolean) => any, ): void; } export const UserSchema: Schema = new Schema(.... UserSchema.pre('save', function(next) { UserSchema.methods.checkPassword = function(.... create-user.dto.ts and all kinds of dtos for each operation. These seem redundant with my GraphQl types file with describing inputs above. Here is a dto: export class CreateUserDto { readonly email: string; readonly password: string; readonly username: string; } I'm wondering what the best practice is to have one truth data to my user models. I'm thinking: Use GraphQLModule.forRoot({ definitions: { path: join(process.cwd(), 'src/graphql.classes.ts'), outputAs: 'class', }, And use that for my interfaces and my dto files since it outputs: export class CreateUserInput { username?: string; email?: string; password?: string; } export class User { _id: number; username?: string; email?: string; password?: string; } Would dto files even be needed then? Does it matter they aren't readonly? Can I split up these classes into my respective folders (Users into user folder, products into products folder) automatically? I'll post a public GitHub link when I'm done with a cookie cutter NestJS, MongoDB, Passport-JWT, GraphQL backend with user authentication so people have a reference (there is one out there that uses DTOs).
Diesel
1

голосов
1

ответ
62

Просмотры

Как оформить несколько команд из nestjs саги?

Я создал сагу реагировать на данное событие. В этом случае, несколько команд должны быть выданы. Моя Saga выглядит следующим образом: @Injectable () экспорт класс SomeSagas {общедоступного конструктор () {} onSomeEvent (события $: EventObservable): Observable {возвращаемых события $ .ofType (SomeEvent) .pipe (карта ((событие: SomeEvent) => {возврат (новый SomeCommand (UUID ()), новый SomeCommand (UUID ()));}),); }} При отладке я обнаружил, что есть ошибка брошена «CommandHandler не нашел исключение!», Который является своего рода запутанным, потому что в случае, если я вернусь только один экземпляр SomeCommand обработчик команды вызывается правильно. Должна ли я что-то пропустил или реализация саги просто не поддерживает выдачу нескольких команд?
Thomas
1

голосов
1

ответ
49

Просмотры

NestJS: Logging запрос / ответ от HTTPService звонков?

Мне было интересно, если его можно регистрируют запросы, ответ и ошибки, используя HTTPService от HttpModule. Я имел обыкновение использовать перехватчики из AXIOS, HTTPService обертывания AXIOS, но я не могу добавить любые перехватчики здесь, как представляется, не должно быть место в HttpModule.register (...) Тогда я подумал, что NestJS приходит со своим собственным перехватчики и спрашивает, если его можно использовать NestJS перехватчики. Я не хотел бы применить перехватчик через контроллер, сервис, но применить его к HTTPService? Любые идеи, немного потеряли, как это сделать в nestjs пути. заранее спасибо
Ian Gregson
1

голосов
1

ответ
47

Просмотры

nestjs ТипСодержимого набор отклика в качестве значений потока

с springboot вы можете послать поток значения (например, разорвать посланным-событие), чтобы пользователь с resposne типа содержимого (@Response (продукции) = APPLICATION_JSON_STREAM_VALUE так, как использовать это с nestjs ???
Halim Dev
1

голосов
1

ответ
61

Просмотры

Как изменить название коллекции или Дб поставщика Mongoose динамически, Nestjs?

Мне нужно было бы изменить, где мои запросы указывают в приложении Nestjs. Я работаю в угловом приложении с версиями, так что я должен изменить коллекции или даже базы данных динамически в моем заднем конце с Мангустом и Nestjs. Я предполагаю, что я должен изменить цель в поставщике и попытаться изменить его динамически, в зависимости от версии пользователь выбрал в передней части. Во всяком случае у меня есть, как н импорт {Connection} из «мангуст»; импорт {TestSchema} от './schemas/test.schema'; экспорт константного testProviders = [{обеспечивает: 'TestModelToken', useFactory: (соединение: Соединение) => connection.model ( 'Test', FilterSchema, 'испытания'), вводят: [ 'DbConnectionToken']},]; А потом, к примеру,
ackuser
1

голосов
1

ответ
41

Просмотры

Как использовать 2 отдельные базы данных, по одному на стороне записи и одну сторону чтения. (Две базы данных синхронизированы с помощью eventbus)

Я использую / модуль CQRS @ nestjs. Как использовать две отдельные базы данных, один для записи стороны и один на сторону чтения. (Две базы данных синхронизированы с помощью eventbus) Благодаря
namdn
0

голосов
0

ответ
5

Просмотры

NestJS: GraphQL wraps 401 network errors inside graphql errors, any way to escape this so angular can intercept?

Я переехал через мой апи из стандартного приложения узла к гнезду. Ранее я использовал паспорт (как я сейчас), и когда есть 401 мой апи бросил ошибку сети, так что я был в состоянии поднять это в угловом с помощью углового перехватчика и попытаться обновить свой маркер. В настоящее время используется nestjs и паспорт, в функции валидации, если я вернусь ложные (т.е. Токен недействителен), то, конечно, это принимается на клиенте как 401, но обернуты внутри graphql ошибки - так что мой угловой перехватчик никогда не вызывается, потому что его не сеть ошибка. Я пытался бросить UnauthorizedException из функции валидации также, но он так же поступает в свернутом graphql 401 ошибки. Я использую AuthGuard путем расширения AuthGuard (nestjs) -specifically для Graphql согласно документации. экспорт Const GqlAuthGuard = (тип ?: строка) => Класс GqlAuthGuardInternal расширяет AuthGuard (тип) {GetRequest (контекст: ExecutionContext) {сопз CTX = GqlExecutionContext.create (контекст) возвращают ctx.getContext () запрос}.} Но запускает graphql ошибку и не ошибка 401 сети. Есть ли способ обойти это, я проверил документацию, и я ничего не могу найти. Не должен ли ошибки 401 изготовлять сеть, а не graphql ошибки? Работа со AuthGuard, технически запрос не пришел к graphql поэтому любая ошибка должна произвести ошибку сети, а не оборачивать ошибки внутри graphql ошибки и вернуть 200. Любые идеи? Есть ли способ обойти это, я проверил документацию, и я ничего не могу найти. Не должен ли ошибки 401 изготовлять сеть, а не graphql ошибки? Работа со AuthGuard, технически запрос не пришел к graphql поэтому любая ошибка должна произвести ошибку сети, а не оборачивать ошибки внутри graphql ошибки и вернуть 200. Любые идеи? Есть ли способ обойти это, я проверил документацию, и я ничего не могу найти. Не должен ли ошибки 401 изготовлять сеть, а не graphql ошибки? Работа со AuthGuard, технически запрос не пришел к graphql поэтому любая ошибка должна произвести ошибку сети, а не оборачивать ошибки внутри graphql ошибки и вернуть 200. Любые идеи?
Ian Gregson
1

голосов
1

ответ
675

Просмотры

Как решить проблему DI в nest.js?

Я хочу понять, как импортировать библиотеку 3rd партии в nestjs через DI. Таким образом, у меня есть класс AuthService: экспорт класс AuthService {конструктор (@Inject (constants.JWT) частное jsonWebToken: любой,) {} ....} JWT поставщик: импорт * в JWT из 'jsonwebtoken'; импорт {} Модуль из '@ nestjs / общий'; импорт константа из»../../../constants'; Const jwtProvider = {обеспечивают: constants.JWT, useValue: JWT,}; @Module ({компонента: [jwtProvider]}) класс экспорт JWTProvider {} Библиотека модуль: импорт {} Модуль из '@ nestjs / общий'; импорт {BcryptProvider} от './bcrypt/bcrypt.provider'; импорт {JWTProvider} от './jsonwebtoken/jwt.provider'; @Module ({компоненты: [BcryptProvider, JWTProvider,], контроллеры: [], экспорт: [BcryptProvider, JWTProvider,], }) Экспорт класс LibrariesModule {} Я получаю эту ошибку: Ошибка: Гнездо не может разрешить зависимости для AuthService (). Пожалуйста, проверьте ли [0] аргумент доступен в текущем контексте. на Injector. (D: \ Обучение \ гнезда \ Проект \ node_modules \ @nestjs \ ядро ​​\ инжектор \ injector.js: 156: 23) при Generator.next () при выполнены (D: \ Обучение \ гнезда \ Проект \ node_modules \ @nestjs \ ядро \ инжектор \ injector.js: 4: 58) при в process._tickCallback (внутренний / процесса / next_tick.js: 188: 7) Кроме того, я хочу услышать некоторые рекомендации о том, не используя вводите в переменной jsonWebToken.
Tymur Valiiev
1

голосов
1

ответ
1.5k

Просмотры

How to use passport in nestjs middleware?

Я пытаюсь написать аутентификации промежуточного уровня. Проблема заключается в том, что моя установке бросает «Незарегистрированный» каждый раз, когда я пытаюсь сделать что-то. Мой промежуточный слой: @Middleware () экспорт класс AuthMiddleware реализует NestMiddleware {конструктора (@Inject (constants.logger) частный регистратор: Уинстон) {} решительность (... арг: любой []): ExpressMiddleware {возвращение passport.authenticate (» JWT», {сессия: ложь}); }} JwtStrategy класс: @Component () экспорт класс JwtStrategy распространяется Стратегия {Конструктор (частный authService только для чтения: AuthService, @Inject (constants.config) частные чтения конфигурации: Config,) {супер ({jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken (), passReqToCallback : правда, secretOrKey: config.JWT_SECRET,}, асинхронная (REQ, полезная нагрузка, следующая) => {Console.log ( 'Привет от verifycb'); Следующий (нулевая, полезная нагрузка); },); passport.use ( 'JWT', это); } Общественные асинхронные проверить (REQ, полезная нагрузка: TokenData, сделана) {console.log ( 'JwtStrategy :: проверить (REQ, полезная нагрузка)', {REQ, полезная нагрузка}); Const = IsValid ждет this.authService.isUserValid (полезную нагрузка); (! IsValid) если {возвращение сделано ( 'Несанкционированное 22', ложь); } Сделано (нуль, полезная нагрузка); }} Я уверен, что мой промежуточный слой называется. Могу ли я использовать его в странным образом или что? IsValid) {возвращение сделал ( 'Несанкционированное 22', ложь); } Сделано (нуль, полезная нагрузка); }} Я уверен, что мой промежуточный слой называется. Могу ли я использовать его в странным образом или что? IsValid) {возвращение сделал ( 'Несанкционированное 22', ложь); } Сделано (нуль, полезная нагрузка); }} Я уверен, что мой промежуточный слой называется. Могу ли я использовать его в странным образом или что?
Tymur Valiiev
1

голосов
1

ответ
79

Просмотры

Using component from exports in a module

/user/user.module»@Module ({импорт: [UserModule], компоненты: [], контроллеры: []}) экспорт класс AuthModule реализует NestModule {общественный Configure (потребительскую: MiddlewaresConsumer) {// СНИП // Как использовать `UserService` здесь}} Как использовать UserService здесь? Документы говорят: Теперь каждый модуль, который будет импортировать CatsModule (мы должны поставить CatsModule в массив импорта) имеет доступ к CatsService и разделят тот же экземпляр со всеми модулями, которые импортируют этот модуль. Но не дает пример того, как вы бы. MiddlewaresConsumer) {// СНИП // Как использовать `UserService` здесь}} Как использовать UserService здесь? Документы говорят: Теперь каждый модуль, который будет импортировать CatsModule (мы должны поставить CatsModule в массив импорта) имеет доступ к CatsService и разделят тот же экземпляр со всеми модулями, которые импортируют этот модуль. Но не дает пример того, как вы бы. MiddlewaresConsumer) {// СНИП // Как использовать `UserService` здесь}} Как использовать UserService здесь? Документы говорят: Теперь каждый модуль, который будет импортировать CatsModule (мы должны поставить CatsModule в массив импорта) имеет доступ к CatsService и разделят тот же экземпляр со всеми модулями, которые импортируют этот модуль. Но не дает пример того, как вы бы.
Arcath
1

голосов
2

ответ
810

Просмотры

Гнездо не может решить зависимостей в фотосервис (?)

Я начинаю с Nest.js и я получаю сообщение об ошибке после создания службы: (?) Гнездо не может решить зависимостей в фотосервис. Пожалуйста, проверьте ли [0] аргумент доступен в текущем контексте. Я следую примеру базы данных: https://docs.nestjs.com/techniques/database Вот мой полный код: https://github.com/marceloHashzen/nestjsbasics
1

голосов
1

ответ
64

Просмотры

TypeError: не могу прочитать сообщение об ошибке «имя» свойства при обновлении до NestJs 5,1

Я пытаюсь обновить свои nestjs от 5.0.beta до 5,1. В каждой загрузке я получаю следующее сообщение об ошибке. Не знаю, где искать решение. Спасибо за любую помощь. TypeError: Не удается прочитать 'имя' свойства неопределенных на Module.addModuleAsComponent (myApp/node_modules/@nestjs/core/injector/module.js: 72: 45) в Module.addCoreInjectables (MYAPP / node_modules / @ nestjs / ядро ​​/ инжектор / module.js: 56: 14) на новом модуле (myApp/node_modules/@nestjs/core/injector/module.js: 24: 14) при NestContainer.addModule (myApp/node_modules/@nestjs/core/injector/container.js : 35: 24) в DependenciesScanner.storeModule (myApp/node_modules/@nestjs/core/scanner.js: 32: 30) в DependenciesScanner.scanForModules (myApp/node_modules/@nestjs/core/scanner.js: 22: 20) в DependenciesScanner.scan (myApp/node_modules/@nestjs/core/scanner.js: 17:
user1835867
1

голосов
1

ответ
697

Просмотры

NestJS: подключение к базе данных (TypeORM) по запросу (субдомен)

Я пытаюсь построить SAAS продукт над гнездом / TypeORM и мне нужно установить соединение с базой данных / изменений по подобласти. customer1.domain.com => подключения к базе данных customer1 customer2.domain.com => подключения к базе данных customer2 x.domain.com => Подключение к базе данных х Как я могу это сделать? С перехватчиками или запросом контекстом (или Zone.js)? Я не знаю, как начать. Кто-то уже делает это? WIP: то, что я сейчас делаю: добавить все разъёмы параметры в ormconfig файл создать Middleware на все маршруты, чтобы ввести субдомна в res.locals (имя экземпляра) и создать / предупредит импорт соединения typeorm {инъекционный, NestMiddleware, MiddlewareFunction} от «@ nestjs / общий "; импорт {GetConnection, CreateConnection} из "typeorm"; @Injectable () экспорт класс DatabaseMiddleware реализует NestMiddleware {решительность (): MiddlewareFunction {возвращение асинхр (REQ, Рез, следующий) => {константный экземпляр = req.headers.host.split ( '') [0] res.locals. экземпляр = экземпляр попытка {GetConnection (экземпляр)} поймать (ошибка) {ждут CreateConnection (экземпляр)} следующих (); }; }} В контроллере: получить имя экземпляра из @Response и передать его в моей службе @Controller ( '/ каталог / категорий') экспорт класс CategoryController {конструктор (частный categoryService: CategoryService) {} @Get () асинхронной GetList (@Query ( ) запроса: SearchCategoryDto, @Response () ответ): Promise {возвращение response.send (Await this.categoryService.findAll (response.locals.instance, запрос))} в Service: получить TypeORM менеджер для данного экземпляра и базы данных запросов через Repository @Injectable () экспорт класса CategoryService {// конструктор (// @InjectRepository (категория) частные чтения categoryRepository: Репозиторий //) {} асинхронной getRepository ( пример: строка): Promise {возвращение (ждут getManager (экземпляр)) getRepository. (Категория)} асинхронной FindAll (пример: строки, DTO: SearchCategoryDto): Promise {пусть QueryBuilder = (Await this.getRepository (экземпляр)). (createQueryBuilder 'категория'), если (dto.name) {queryBuilder.andWhere ( "category.name как: имя", {имя: `% $ {dto.name}%`})} возвращения ждут queryBuilder.getMany (); } Это похоже на работу, но я не уверен, что почти все: Соединения Poole (сколько я могу создать соединения в мою ConnectionManager?) пройти субдомен в response.locals ... плохая практика? читаемость / понимание / добавление много дополнительного кода ... побочных эффектов: Боюсь разделить связи между несколькими поддоменов побочными эффектами: производительность Это не удовольствие сделок с response.send () + Promise + ждать (ы) + пропуск подобласть везде ... есть ли способ, чтобы получить поддомен непосредственно в мои службы? Есть ли способ, чтобы получить правильную подобласть подключения / Repository непосредственно в мою службу и Вводит его в мой контроллер? S не приятно сделки с response.send () + Promise + ждать (s) + пасс субдомен везде ... Есть ли способ, чтобы получить поддомен непосредственно в мои службы? Есть ли способ, чтобы получить правильную подобласть подключения / Repository непосредственно в мою службу и Вводит его в мой контроллер? S не приятно сделки с response.send () + Promise + ждать (s) + пасс субдомен везде ... Есть ли способ, чтобы получить поддомен непосредственно в мои службы? Есть ли способ, чтобы получить правильную подобласть подключения / Repository непосредственно в мою службу и Вводит его в мой контроллер?
yoh
1

голосов
1

ответ
173

Просмотры

Как использовать параметры в маршрутах с nestjs?

Я хотел бы использовать 3 маршрута: «проект»; 'Проект / 1'; "Проект / авторы. Но когда я называю проект / авторы ", спровоцированный«проект / 1», и я получаю сообщение об ошибке. Как awoid это? @Controller ( 'проект') экспорт класса ProjectController {@Get () getProjects асинхронного (@Res () разрешение): Promise {возвращение ждет this.projectService.getProjects (0, 0) .then (проекты => res.json (проекты )); } @Get ( ': идентификатор') асинхронной getProject (@param ( 'ID', новый ParseIntPipe)) идентификатор (, @Res () Рез): Promise {возвращение ждут this.projectService.getProjects (ID) .Затем (проект = > res.json (проект [0])); } @Get ( '/') Авторы асинхронных getAuthors (@Res () RES): Promise {возвращение ждет this.projectService.getAuthors (), затем (авторы => res.json (авторы));. }}
alexDuck
1

голосов
1

ответ
57

Просмотры

Вы знаете, любой REST генератор для nestjs BE nodejs рамки?

Я искал, и я не нашел ничего, что я пытаюсь найти генератор REST для создания контроллера, обслуживание, модуль и т.д. от модели, но это безнадежно Есть некоторые генераторы, как Gii в Yii2?
Link
1

голосов
1

ответ
69

Просмотры

Вводит поставщик в другом поставщике, тот же модуль # 1250

У меня есть сервис / провайдера, скажем, это вызов ServiceA1, в модуле A, помеченный как @Injectable (). В том же модуле, у меня есть еще один сервис / провайдер, скажем, это вызов ServiceA2, отмечен как @Injectable (). Я хочу, чтобы придать ServiceA1 в ServiceA2 я пытаюсь с: Этот код выдаст ошибку: serviceA1 не определено. Мой module.ts Должен ли я сделать еще один модуль для использования serviceA2 в serviceA1?
user9659880
1

голосов
1

ответ
101

Просмотры

«Не удается установить заголовки после того, как они отправляются» - при настройке ответа напрямую

Я использую NestJS для моего API сервера, и я очень доволен. Большинство моих функций контроллера зовущих функции асинхронной и возвращают JSON - работает как шарм. Но в некоторых функциях контроллера, мне нужно, чтобы установить ответ / заголовки / и т.д. непосредственно в объект ответа, например: @Get ( «апи / медиа») асинхронная getMedia (@param ( «ид») ID: строка, @Req ( ) REQ) {пусть результат = ждут getMediaFromBackend (ID); req.res.set ( 'Content-Type', result.contentType); // нужно установить тип содержимого динамически req.res.send (result.data); // отправить ответ, не JSon} В некоторых других случаях мне нужны трубы рекомендуемого gzipStream. Это работает, но я всегда получаю необработанное отказ в консоли: «Не удается установить заголовки после того, как они отправляются» Похоже, NestJS хочет установить / перезаписать заголовки после того, как функция регулятора возвращается. Любые идеи, как этого избежать? Я должен был бы некоторые функциональные возможности сказать NestJS как «им в полной мере заботиться о себе» ответ Спасибо большое!
jueschus
1

голосов
1

ответ
0

Просмотры

API управления: не могу поставить, не удается удалить (404 не найден)

С Nest.js и основного контроллера: импорт {Body, контроллер, удаление, Получить, Param, POST, PUT, запрос} от '@ nestjs / общий'; импорт {Hero} от '../entities/hero.entity'; импорт {HeroService} от './hero.service'; @Controller ( 'герой') экспорт класс HeroController {конструктор (частный heroesService только для чтения: HeroService) {} @Get () асинхронного получить (@Query () запрос): Promise {возвращение ждет this.heroesService.find (запрос); } @Get ( ': идентификатор') асинхронной GetByID (@param ( 'ID') Id): Promise {возвращение ждут this.heroesService.findById (ID); } @Post () асинхронный добавить (@body () герой: Hero): Promise {возвращение ждет this.heroesService.save (герой); } // TODO: не похоже на работу, никогда не звонил (запрос 404) @Put ( ': идентификатор') обновление асинхронной (@param ( 'ID') идентификатор, @body () герой): Promise {console.log ( 'эй'); Возвращение ждут this.heroesService.update (ID, герой); } // TODO: не похоже на работу, никогда не звонил (запрос 404) @Delete ( '/ удалить /: идентификатор') асинхронной удалить (@param ( 'ID') идентификатор): Promise {console.log ( 'эй «); Обратно ждут this.heroesService.remove (ID); }} После основной документации nest.js, модуль с контроллером и службой, инъекционными хранилищами typeorm для объекта «Героя». Использование Почтальон, как @Get, @Get ( «: ID») и @post работают отлично, моя entity-> repository-> сервис-> контроллер подключается к моей локальной БД Postgres, и я могу получить / добавить данные / обновления от таблица Hero с этими API конечными точками. Тем не менее, PUT и DELETE запросы отвечают: { "StatusCode": 404, "ошибка": "Not Found", "
Grymas
1

голосов
1

ответ
0

Просмотры

How to explicitly execute some code at application or feature module loading?

У меня есть простой NestJS веб-приложение. Я закодирован свой собственный простой планировщик задач и ввел ее в глобальный модуль. Это довольно просто, вы просто передать его функции и дату, и она будет выполнять функцию на определенную дату или в повторяющейся моды, если передать некоторые другие параметры. scheduler.add (MyFunc, MyDate); Мой проект структурируется функциональными модулями и каждая особенность модули имеют свои собственные контроллеры и услуги. Некоторые задачи будут добавлены в планировщик в результате запроса HTTP, и в этом случае достаточно просто добавить задачу, вы делаете это прямо в сервисном методе обработки соответствующего запроса. Но некоторые задачи, особенно некоторые повторяющиеся задачи, должны быть добавлены в приложении или загрузке модуля. Я планировал иметь файл, связанный с каждым модулем функций, который будет содержать все повторяющиеся задачи, которые должны регистрироваться с моим планировщиком при применении или загрузке модуля. Мой первый инстинкт, что файл может выглядеть следующим образом: feature.scheduled-tasks.ts импорт {} Scheduler из «./src/scheduler»; импорт {модель} от '@ nestjs / общий'; импорт {UserModel} от '.src / кто / ухаживает / вы / получить / с / идеи'; импорт {SomeService} от '.src / см / выше'; // Мне нужно гнездо, чтобы ввести Планировщик здесь константный планировщик: Планировщик // Мне нужно гнездо, чтобы ввести некоторые другие связанные с особенностью поставщиков здесь, // как Mongoose модели базы данных и другие услуги сопзЬ userModel: Модель; Const someService: SomeService; Const firstTask = () => {// делать вещи, используя userModel} Const secondTask = () => {// делать вещи, используя someService} scheduler.add (firstTask, {единиц: 5, меру: 'DayOfMonth'}); scheduler.add (secondTask, {единицы: 17, размер: 'DAYOFMONTH'}); У меня есть две проблемы / вопросы в получении этого к работе: Как получить Nest впрыснуть поставщиков, что мне нужно в этом файле? Как сказать Nest запускать содержимое этого файла на приложения или модуля функция нагрузки?
neoflash
1

голосов
1

ответ
0

Просмотры

How to inject model if the model is in the root module only

Я хочу, чтобы придать Монго дб модели в NestJS службе. Модель присутствует только в корневом модуле. импорт {} инъекционные от '@ nestjs / общий'; импорт {InjectModel} от '@ nestjs / Мангуст'; импорт {модель} из «мангуста»; импорт {IFolderModel} от './interfaces/folder.interface'; @Injectable () экспорт класс FolderService {конструктор (@InjectModel ( 'IFolder') частный folderModel: Model) {} асинхронной создать (folderInstance: IFolderModel): Promise {сопз folderModelToBeSaved = новый this.folderModel (folderInstance); Возвращение ждут folderModelToBeSaved.save (); } Асинхронной FindAll (): Promise {возвращение ждут this.folderModel.find () Exec ();. }} Я получаю следующее сообщение об ошибке при запуске приложения с помощью запуска НПМ запуска Ошибки: Гнездо может» т разрешения зависимостей на FolderService (?). Пожалуйста, убедитесь, что аргумент с индексом [0] доступен в контексте AppModule. Содержание AppModule пусть MongoDB = env.mongodb; пусть URL = `MongoDB: // $ {mongodb.user}: $ {mongodb.pwd} @ $ {mongodb.host}: $ {mongodb.port} / $ {mongodb.dbName}`; @Module ({импорт: [MongooseModule.forRoot (URL)], контроллеры: [AppController, FolderController], провайдеры: [AppService, FolderService]}) экспорт класс AppModule {}
Amit Dube
1

голосов
1

ответ
0

Просмотры

nestjs: dynamic global module

Официальные гнездятся документы на модулях объяснить о глобальных модулей и динамических модулей. Я интересно, если это возможно, чтобы объединить две модели? Мой случай использования заключается в следующем: У меня динамический модуль конфигурации: экспорт класс ConfigModule {статический forRoot (baseConfigPath: строка): DynamicModule {константных поставщики = [{обеспечивает: 'Config', useValue: configFactory (baseConfigPath)}]; вернуться {модуль: ConfigModule, поставщики, экспорт: поставщики,}; }} Это позволяет конфигурации-модуль, зависит от пройденного пути в базовой конфигурации. Затем я могу импортировать модуль в главном модуле приложения следующим образом: @Module ({импорт: [ConfigModule.forRoot (path.resolve (__ имя_каталога, '../config'))], контроллеры: [AppController], провайдеры: [ AppService], }) Экспорт класс AppModule реализует NestModule {}, которая является своего рода хорошим. Тем не менее, у меня есть много других модулей (дочерние модули модуля приложения, братьев и сестер модуля конфигурации), где я также хочу тот же экземпляр динамического модуля конфигурации быть инъекционный. Было бы замечательно, если бы я мог отметить динамическую ConfigModule так или иначе, как глобальное - или есть другой способ? Я уже пытался сделать ConfigModule с глобальным @Global, но это не сработало - вот супер минимальный приведенный пример репо на основе гнезда стартера, созданное гнездом нового: https://github.com/DeX3/nest-di -детская площадка Было бы замечательно, если бы я мог отметить динамическую ConfigModule так или иначе, как глобальное - или есть другой способ? Я уже пытался сделать ConfigModule с глобальным @Global, но это не сработало - вот супер минимальный приведенный пример репо на основе гнезда стартера, созданное гнездом нового: https://github.com/DeX3/nest-di -детская площадка Было бы замечательно, если бы я мог отметить динамическую ConfigModule так или иначе, как глобальное - или есть другой способ? Я уже пытался сделать ConfigModule с глобальным @Global, но это не сработало - вот супер минимальный приведенный пример репо на основе гнезда стартера, созданное гнездом нового: https://github.com/DeX3/nest-di -детская площадка
DeX3
1

голосов
1

ответ
0

Просмотры

Гнездо не может решить зависимости в RegisterService (?). Убедитесь, что аргумент с индексом [0] доступен в контексте RegisterModule

Я столкнулся с этой проблемой в структуре nestjs.Project является как- src- -RegisterModule -register.controller.ts -register.service.ts -register.dto.ts -register.schema.ts -register.module.ts -app. module.ts -app.controller.ts -app.service.ts
Omkar Jadhav
1

голосов
1

ответ
0

Просмотры

NestJS - Метаданные в КПГРАХ microservice

Я ищу способ разрешить удаленный вызов процедуры через NestJS КПГР microservices. В основном я хочу, чтобы прикрепить маркер в клиенте КПГР, которое должно быть подтверждено сервером КПГР. Я нашел этот вопрос, но я не получил, где именно grpc.Metadata передать в качестве второго аргумента.
user2534584
1

голосов
1

ответ
0

Просмотры

Как получить доступ к идентификатору связи с присоединились поля Родителя в NestJS / TypeORM

Я настройка API NestJS GraphQL, который использует TypeORM, и у меня возникает проблемы, реализующие отношения между сущностями. В частности, TypeORM отношения работают великолепно, и сущность правильно ссылок в базе данных. Тем не менее, проблема возникает, когда я пытаюсь запросить API, чтобы получить результаты. Сейчас у меня есть 2 сущности, каждый со своими разрешителя: пользователи и фотографий. Каждый пользователь может иметь несколько фотографий, в то время как каждая фотография подключается только к одному Пользователю (Много-к-одному). Вот как объекты связаны с TypeORM Фото Сущности, с связи с Пользователем Entity @ManyToOne (тип => Пользователь, пользователь => user.photos, {OnDelete: 'КАСКАД',}) @JoinColumn () пользователя: User; Entity пользователя, завершение соединения с фото Entity @OneToMany (тип => Фото, фото => photo.user, {стремится: правда,}) фото: Фото[]; Этот код работает, и давайте нам получить Фото пользователя распознавателя Пользователя @ResolveProperty ( «фото») фотографии асинхронных (@Parent () пользователь): Promise {возвращение ждет this.service.readPhotos (user.id); } Служба пользователя readPhotos (асинхронное): USERID обещание {возвращение ждет this.photoRepository.find ({где: {пользователя: идентификатор пользователя}}); } * Обратите внимание, что photoRepository может быть отфильтрован в поле «пользователя». * Этот код, однако, не работает. Это должно позволить нам увидеть, какие Пользователь подключается к фото, вместо этого он возвращает нуль. Фото распознавателя @ResolveProperty ( 'пользователь') асинхронный пользователь (@Parent () фото): Promise {console.log (фото); Возвращение ждут this.service.readUser (photo.user); } Эта фотография распознаватель, кажется, содержит проблему; объект фото выводится на консоль указывает на то, что в то время как фото объекта @Parent имеет все его статических полей, доступных (например, идентификатор, datePublished, URL), по какой-то причине фактическое поле «пользователь» не доступен здесь. Поэтому переменная «photo.user» равно нулю. * Обратите внимание, что это, кажется, указал, что photoRepository неспособна быть отфильтрованы / доступа к полю «пользователя». * Услуги фотографа асинхронная readUser (идентификатор пользователя): Promise {возвращение ждет this.userRepository.findOne ({где: {пользователя: идентификатор пользователя}}); } Это возвращает нуль, так как идентификатор пользователь пустой, в связи с предыдущим фото распознаватель не в состоянии получить доступ к полю «Пользователь». Заключение Почему не Фото- распознаватель доступа по принципу «пользователь» поле @Parent фото? Служба пользователя, кажется, способен фильтровать по «пользователя» поле просто отлично, но я не могу показаться, чтобы иметь возможность доступа к полю фотографии «пользователя» непосредственно. Спасибо за любую помощь по этому вопросу! Я озадачен об этом в течение последних двух дней ...
Turgon
1

голосов
2

ответ
0

Просмотры

Nestjs Как я могу вводить значения в запросе тела от сеанса JWT req.user

Я создал «пользовательский декоратор» и я использую его, чтобы ввести в запросе органа код компании (ZON_EMPRESA) от пользователя на JWT сессии. // декоратор импорт {createParamDecorator} от '@ nestjs / общий'; экспорт Const = Зона createParamDecorator ((данные, REQ) => {req.body.ZON_EMPRESA = req.user.USU_EMPRESA; возвращение req.body;}); Проверка не работает в контроллере. Если я использую стандартный декоратор @body () проверяет правильность. Но я не могу впрыснуть тело со значением ZON_EMPRESA от req.user из JWT сессии // CONTROLLER @Put ( '') обновления асинхронного (@Zona () тела: IZona) {возвращение ждет this.zonaonaService.update (тело); } // ВАЛИДАЦИЯ импорт {IsString, длина, IsInt, Min} от 'класса-валидатор'; экспорт класс IZona {ZON_CODIGO ?: только для чтения номера; @IsInt () @Min (1) только для чтения ZON_EMPRESA: число; @IsString () @Length (5, 50) только для чтения ZON_NOME: строка; @IsInt () @Min (1) только для чтения ZON_VENDEDOR: число; } Как я могу это исправить. Спасибо
Apicito Diaz

Просмотр дополнительных вопросов