在实践NestJS..
在Controller中使用了DTO,我通过解构赋值为它们声明了3个变量。在这个时候,我在声明测试时使用了'let'关键字。
export class SignUpDto {
name: string;
email: string;
readonly password: string;
}
@Post()
async signUp(@Body() signUpDto: SignUpDto): Promise<void> {
let { name, email, password } = signUpDto;
console.log(1, name);
if (!name || !email || !password) {
throw new BadRequestException();
}
name = 'new name';
console.log(2, name);
console.log(signUpDto.name);
await this.usersService.signUp(signUpDto);
}
在声明之后,'name'的值与REQ的body.('username ')相同,所以我将其值改为' newname '
然后,当我只记录'name'变量时,'name'变量在控制台中打印'new name'。但是,当我记录'signUpDto.name'时,它仍然打印'username'。
// console.log(1, name);
1 username
// console.log(2, name);
2 new name
// console.log(signUpDto.name);
username
// the result returned from usersService
UsersService { name: 'username', email: 'user@email.com', password: 'PassWord' }
我看过官方文件,但找不到正确的理由。
我的一个想法是,它们存储在内存中的不同位置,因此它们打印不同的值。
你能告诉我这是什么意思吗?我不知道为什么'name'的值没有改变。
1条答案
按热度按时间5lhxktic1#
当你通过
let { name } = body
解构对象时,你正在创建一个名为name
的新变量。这个值是通过值访问的,而不是通过引用访问的,所以当你修改它时,它不会修改原始对象的值。