我正在尝试在 NestJS 中创建一个可通过 GET HTTP 请求访问的控制器操作,该请求接收两个参数,但由于某种原因它们未定义。
如何解决?
@Get('/login')
login(@Param() params: LoginUserDto) {
console.log(params)
return 'OK'
}
Run Code Online (Sandbox Code Playgroud)
import { ApiModelProperty } from '@nestjs/swagger';
export class LoginUserDto {
@ApiModelProperty()
readonly userName: string;
@ApiModelProperty()
readonly password: string;
}
Run Code Online (Sandbox Code Playgroud)
W.P*_*rin 14
在浏览器中
localhost:3001/Products/v1/user2
Run Code Online (Sandbox Code Playgroud)
像这样的控制器:
@Controller('Products')
export class CrashesController {
constructor(private readonly crashesService: CrashesService) { }
@Get('/:version/:user')
async findVersionUser(@Param('version') version: string, @Param('user') user: string): Promise<Crash[]> {
return this.crashesService.findVersionUser(version, user);
}
}
Run Code Online (Sandbox Code Playgroud)
Nest 不支持Get以这种方式自动将查询参数转换为对象的能力。预计您将通过将参数的名称传递给@Param装饰器来单独提取参数。
尝试将您的签名更改为:
login(@Param('userName') userName: string, @Param('password') password: string)
Run Code Online (Sandbox Code Playgroud)
如果您想接收一个对象,请考虑切换到Post在请求正文中使用和传递该对象(无论如何,这对我来说对登录操作更有意义)。
小智 6
现在我在 7.0.0 上使用 NestJs,如果你这样做:
@Get('/paramsTest3/:number/:name/:age')
getIdTest3(@Param() params:number): string{
console.log(params);
return this.appService.getMultipleParams(params);
}
Run Code Online (Sandbox Code Playgroud)
结果console.log(params)将是(这些值仅是示例):
{ number:11, name: thiago, age: 23 }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14376 次 |
| 最近记录: |