#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