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 控制器/类验证器错误以返回这样的消息?
在 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)
我实在不知道为什么会出现这个。
我使用 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) 我正在运行一个 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
非常感谢任何帮助了解如何解决此问题的帮助。
根据文档,我在控制器的构造函数中注入了服务,但结果却是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) 我想知道是否有一种方法可以为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) 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) 我正在尝试在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) 我想知道是否有一个装饰器使该req.user对象在控制器方法中可用,如果用户已登录(发送了身份验证标头),如果没有,则将其req.user设为null。
该AuthGuard装饰将返回401,如果用户没有登录,所以它不适合我的情况。
我正在学习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) nestjs ×10
typescript ×5
node.js ×4
javascript ×3
angular ×1
backend ×1
decorator ×1
httprequest ×1
jwt ×1
nrwl ×1
nrwl-nx ×1
passport.js ×1
redis ×1
repository ×1
swagger ×1