NestJS выбрасывает http-исключение из guard (экспортирует как библиотечный модуль)

#typescript #exception #nestjs

#typescript #исключение #nestjs

Вопрос:

Я создаю библиотеку nestjs, в которую я включаю guard как часть модуля,

Я пытаюсь выдать http-ошибку из guard, но контекст был потерян в контроллере, вместо этого он просто выбросит 500.

Он отлично работает, если я импортирую библиотеку в качестве исходного кода вместо сборки dist.

 @Injectable()
export class SignedUrlGuard implements CanActivate {
    constructor(
        private readonly signedUrlService: SignedUrlService,
    ) { }

    canActivate(
        context: ExecutionContext,
    ): boolean | Promise<boolean> | Observable<boolean> {
        const request = context.switchToHttp().getRequest();
        return this.validateRequest(request, request.query);
    }

    private validateRequest(request: Request, query: Record<string, string>): boolean {
        try {
            return this.signedUrlService.isSignatureValid(request, query)
        } catch (error) {
            throw new ForbiddenException('Invalid url ,with custom error message')
        }
    }
}
  
 "devDependencies": {
    "@nestjs/common": "^7.4.4",
    "@nestjs/core": "^7.4.4",
    "@types/express": "^4.17.8",
    "@types/node": "^14.14.2",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^6.6.3",
    "typescript": "^4.0.3",
    "prettier": "^2.1.2",
    "eslint": "^7.12.0",
    "eslint-config-prettier": "^6.14.0",
    "@typescript-eslint/eslint-plugin": "^4.5.0",
    "@typescript-eslint/parser": "^4.5.0"
  },
  "peerDependencies": {
    "@nestjs/common": "^7.4.4",
    "@nestjs/core": "^7.4.4",
    "reflect-metadata": "^0.1.13"
  }
  

tsconfig

 {
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "strict": true,
    "noImplicitAny": false,
    "removeComments": true,
    "noLib": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es2019",
    "sourceMap": false,
    "outDir": "./dist",
    "rootDir": "./lib",
    "skipLibCheck": true
  },
  "include": ["lib/**/*"],
  "exclude": ["node_modules", "dist", "test", "**/*spec.ts"]
}
  

Вы можете проверить полный код здесь
https://github.com/vh13294/nestjs-signed-url

Ответ №1:

установка npm через файловую систему не будет работать

чтобы решить эту проблему, попробуйте

пакет npm

затем установите из файла tgz