标签: nestjs

如何更改 NestJS 控制器/类验证器错误消息的格式,显示每条消息属于哪个字段?

NestJS 控制器以及类验证器当前返回如下错误消息:

{
  statusCode: 422,
  message: [ 'Name is required', 'Email is required' ],
  error: 'Unprocessable Entity'
}
Run Code Online (Sandbox Code Playgroud)

但我想将每条消息绑定到其相关属性,如下所示:

{
  statusCode: 422,
  message: { name: 'Name is required', email: 'Email is required' },
  error: 'Unprocessable Entity'
}
Run Code Online (Sandbox Code Playgroud)

我的DTO:

import { IsNotEmpty } from 'class-validator';

export class CreateUserRequestDTO {
  @IsNotEmpty({ message: 'Name is required' })
  name: string;

  @IsNotEmpty({ message: 'Email is required' })
  email: string;
}
Run Code Online (Sandbox Code Playgroud)

我如何更改 NestJS 控制器/类验证器错误以返回这样的消息?

error-handling backend typescript class-validator nestjs

2
推荐指数
1
解决办法
1153
查看次数

NestJs 类型错误 - “未定义”类型的参数不可分配给“字符串 | 类型”的参数 象征'

在 NestJs 中使用 InjectRepository 装饰器时,突然出现类型错误。每个服务都会发生此错误。

 constructor(
    private userRepository: UserRepository,

    @InjectRepository(Workout) <--- Error
    private workoutRepository: Repository<Workout>,
  ) {}
Run Code Online (Sandbox Code Playgroud)
{
  "compilerOptions": {
    "module": "CommonJS",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true,
    "skipLibCheck": true,
    "strictNullChecks": true,
    "noImplicitAny": true,
    "strictBindCallApply": true,
    "forceConsistentCasingInFileNames": true,
    "noFallthroughCasesInSwitch": true,
    "resolveJsonModule": true
  }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误: 作为表达式调用时无法解析参数装饰器的签名。“未定义”类型的参数不可分配给“字符串|”类型的参数 符号'.ts(1239)

我实在不知道为什么会出现这个。

repository decorator typescript nestjs

2
推荐指数
1
解决办法
4080
查看次数

NestJS 验证 AWS Cognito JWT:“TypeError:applicationRef.isHeadersSent 不是函数”

我使用 AWS Cognito 作为我的 NestJS 应用程序的身份验证服务。但是,当我在没有 JWT(未经身份验证)的情况下访问端点时,服务器总是崩溃并抛出此错误:TypeError: applicationRef.isHeadersSent is not a function,但当包含有效的 JWT 时,它运行良好,即由受保护的 API 端点返回正确的数据。授权守卫。以下是我构建身份验证配置和身份验证防护的方法。有人可以看一下吗?提前致谢!

src/authz/authz.module.ts


import { Injectable } from '@nestjs/common';
import { PassportStrategy } from '@nestjs/passport';
import { ExtractJwt, Strategy } from 'passport-jwt';
import { passportJwtSecret } from 'jwks-rsa';

@Injectable()
export class JwtStrategy extends PassportStrategy(Strategy) {
  constructor() {
    super({
      secretOrKeyProvider: passportJwtSecret({
        cache: true,
        rateLimit: true,
        jwksRequestsPerMinute: 5,
        jwksUri: `https://cognito-idp.us-east-1.amazonaws.com/xxxxx/.well-known/jwks.json`,
      }),
      jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(),
      issuer: 'https://cognito-idp.us-east-1.amazonaws.com/xxxxx',
      algorithms: ['RS256'],
    });
  }

  validate(payload: unknown): unknown {
    return payload;
  } …
Run Code Online (Sandbox Code Playgroud)

authentication typescript amazon-cognito nestjs

2
推荐指数
1
解决办法
1565
查看次数

如何解决以下错误:找不到模块“@nx/node/src/executors/node/schema.json”

我正在运行一个 Nx 工作区,并且有一个 NestJs 应用程序,到目前为止一直运行良好。当我去提供该应用程序时,出现以下错误:

Error: Unable to resolve @nrwl/node:node.
Cannot find module '@nx/node/src/executors/node/schema.json'
Require stack:
- C:<workspace>\node_modules\nx\src\config\workspaces.js
- C:<workspace>\node_modules\nx\src\config\configuration.js
- C:<workspace>\node_modules\nx\src\utils\package-manager.js
- C:<workspace>\node_modules\nx\bin\init-local.js
- C:<workspace>\node_modules\nx\bin\nx.js
- C:<workspace>nx\bin\nx.js
    at Workspaces.readExecutor (C:<workspace>\node_modules\nx\src\config\workspaces.js:122:19)
    at C:<workspace>\node_modules\nx\src\tasks-runner\utils.js:191:26
    at Generator.next (<anonymous>)
    at fulfilled (C:<workspace>\node_modules\tslib\tslib.js:164:62)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
Run Code Online (Sandbox Code Playgroud)

我尝试清除我的节点模块文件夹并重新安装所有依赖项,但我没有运气。目前运行 Nx 16.5.5

非常感谢任何帮助了解如何解决此问题的帮助。

node.js nrwl nestjs nrwl-nx

2
推荐指数
1
解决办法
951
查看次数

NestJS-注入的服务在构造函数中未定义

根据文档,我在控制器的构造函数中注入了服务,但结果却是undefined

processScraped.controller.ts

import { Controller, Post, Body } from '@nestjs/common';
import { ProcessScrapedService } from "./processScraped.service"

console.log(`\nController - ProcessScrapedService = `, ProcessScrapedService) // logs : class ProcessScrapedService { ......

@Controller('processScraped')
export class ProcessScrapedController {

    constructor(private readonly pss: ProcessScrapedService) {
        console.log(`constructor - pss = `, pss) // logs : undefined (Should not !)
        console.log(`constructor - this.pss = `, this.pss) // logs : undefined (Should not !)
    }

    @Post()
    async processScraped(@Body() body) {
        console.log(`processScraped - this.pss = `,this.pss) …
Run Code Online (Sandbox Code Playgroud)

javascript dependency-injection node.js nestjs

1
推荐指数
3
解决办法
1680
查看次数

Nestjs / swagger:复杂对象

我想知道是否有一种方法可以为Nestjs / swagger支持复杂对象。我刚完成迁移,现在正在研究swagger文档。我的很多请求都返回复杂对象,所以我想知道是否有更简单的方法。例:

class Foobar{
  prop1: {
    subprop1: {
      subsub1: string;
    };
  };
}
Run Code Online (Sandbox Code Playgroud)

成为:

class SubSub{
  @ApiModelProperty()
  subsub1: string;
}
class SubProp{
  @ApiModelProperty()
  subporp1: SubSub;
}
class Foobar {
  @ApiModelProperty()
  prop1: SubProp;
}
Run Code Online (Sandbox Code Playgroud)

如果我这样做:

class Foobar{
  @ApiModelProperty()
  prop1: {
    subprop1: {
      subsub1: string;
    };
  };
}
Run Code Online (Sandbox Code Playgroud)

我大张旗鼓地得到了这个:

{
  "prop1": {}
}
Run Code Online (Sandbox Code Playgroud)

swagger nestjs

1
推荐指数
2
解决办法
1106
查看次数

Nest js无法解析依赖关系。在Auth服务中

Nest无法解析AuthService(?)的依赖项。请验证[0]参数在当前上下文中是否可用。

请找到我的项目资料库

巢式验证测试

Error: Nest can't resolve dependencies of the AuthService (?). Please verify whether [0] argument is available in the current context.
    at Injector.lookupComponentInExports (/home/arpit/Documents/aquaapp/node_modules/@nestjs/core/injector/injector.js:129:19)
    at <anonymous>
    at process._tickCallback (internal/process/next_tick.js:182:7)
    at Function.Module.runMain (internal/modules/cjs/loader.js:697:11)
    at Object.<anonymous> (/home/arpit/Documents/aquaapp/node_modules/ts-node/src/_bin.ts:177:12)
    at Module._compile (internal/modules/cjs/loader.js:654:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:665:10)
    at Module.load (internal/modules/cjs/loader.js:566:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:506:12)
    at Function.Module._load (internal/modules/cjs/loader.js:498:3)
    at Function.Module.runMain (internal/modules/cjs/loader.js:695:10)
    at startup (internal/bootstrap/node.js:201:19)
    at bootstrapNodeJSCore (internal/bootstrap/node.js:516:3)
 1: node::Abort() [/usr/bin/node]
 2: 0x8d04d9 [/usr/bin/node]
 3: v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) [/usr/bin/node]
 4: 0xb17d2c [/usr/bin/node]
 5: v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*) [/usr/bin/node] …
Run Code Online (Sandbox Code Playgroud)

authentication jwt nestjs

1
推荐指数
1
解决办法
2593
查看次数

在NestJS中添加标头HttpRequest

我正在尝试在NestJS中发出Http请求

由于它是受角度启发的,因此我添加了标题

import { Injectable, HttpService} from '@nestjs/common';
...
const headersRequest = new Headers();
headersRequest.append('Content-Type', 'application/json');
headersRequest.append('Authorization', `Basic ${encodeToken}`);
Run Code Online (Sandbox Code Playgroud)

然后调用api

const result = await this.httpService.post(apiUrl, newDevice, { headers: headersRequest });
Run Code Online (Sandbox Code Playgroud)

我得到一个错误

ReferenceError: Headers is not defined
Run Code Online (Sandbox Code Playgroud)

当我Headers导入时,我在VScode中收到此消息警告

Only a void function can be called with the 'new' keyword.
Run Code Online (Sandbox Code Playgroud)

javascript httprequest angular nestjs

1
推荐指数
2
解决办法
3864
查看次数

nestjs中的可选身份验证

我想知道是否有一个装饰器使该req.user对象在控制器方法中可用,如果用户已登录(发送了身份验证标头),如果没有,则将其req.user设为null。

AuthGuard装饰将返回401,如果用户没有登录,所以它不适合我的情况。

javascript node.js typescript passport.js nestjs

1
推荐指数
2
解决办法
624
查看次数

如何使用NestJS Redis微服务?

我正在学习nestjs微服务,

我可以使用什么命令?

const pattern = { cmd: 'get' };
this.client.send<any>(pattern, data)
Run Code Online (Sandbox Code Playgroud)

我如何从redis接收数据?

constructor(private readonly appService: AppService) {}
      @Client({
        transport: Transport.REDIS,
        options: {
          url: 'redis://127.0.0.1:6379',
        },
      })
      client: ClientProxy;

      @Get()
      getHello(): any {
        const pattern = { cmd: 'get foo' };  //Please write sample code here in document
        const data = '';
        return this.client.send<any>(pattern, data);
      }

Run Code Online (Sandbox Code Playgroud)

redis node.js typescript microservices nestjs

1
推荐指数
1
解决办法
2080
查看次数