出于某種原因,我無法在控制臺日志中顯示嵌套物件。一直試圖尋找解決方案大約一天了。
這是我的 JSON:
{
"data": {
"assets": [
{
"asset_name": "Image1.jpg",
"asset_type": "photo",
"is_featured": true,
"asset_id": "alksjd78987120-kjahsdkjahsd61238-kjahsdkjahsjkdh",
"action": "delete"
},
{
"asset_name": "Image2.jpg",
"asset_type": "photo",
"action": "add"
}
]
}
}
我試圖console.log(data.assets);在我的控制器檔案中顯示以在將其傳遞給服務檔案之前對其進行檢查,但我不斷收到錯誤訊息Property 'assets' does not exist on type 'DataDto'.
這是我的DataDto.ts
export class CreateAssetsDto {
@IsString()
@IsOptional()
asset_id: string;
@ApiProperty()
@IsString()
asset_name: string;
@ApiProperty({
enum: Action
})
@IsEnum(Action)
@IsNotEmpty()
action: Action;
@ApiProperty()
@IsString()
asset_type: string;
@ApiProperty()
@IsBoolean()
@IsOptional()
is_featured: boolean;
}
export class AssetsArrayDto {
@ValidateNested()
@Type(() => CreateAssetsDto)
assets: CreateAssetsDto[];
}
export class DataDto {
@ValidateNested()
@Type(() => AssetsArrayDto)
data: AssetsArrayDto;
}
這是我的controller.ts
@ApiBearerAuth()
@UseGuards(AuthGuard('jwt'))
@UsePipes(new ValidationPipe({ transform: true }))
@Put(':id')
async uploadAssets(
@Request() req,
@Param('id') campaignId: string,
@Body() data: DataDto) {
try {
console.log("Data Check");
console.log(data);
const { assets } = data;
console.log(data.assets[0].asset_name);
console.log(JSON.stringify(data, null, 2));
const a = JSON.parse(JSON.stringify(data));
console.log(a)
console.log(assets)
return {
statusCode: HttpStatus.OK,
message: data,
};
} catch (error) {
Logger.log('Validation Error: ');
Logger.log(error);
throw new BadRequestException(error);
}
}
}
我需要做一些我錯過的事情嗎?根據錯誤,即使我在 DTO 中指出了它,我的資料物件似乎也沒有讀取資產作為它的一部分。
另外,當我這樣做時console.log(data) ,我得到的是:
Data Check
DataDto {
data: AssetsArrayDto { assets: [ [CreateAssetsDto], [CreateAssetsDto] ] }
}
uj5u.com熱心網友回復:
你已經告訴 TypescriptDataDto有一個名為datatype的屬性AssetsArrayDto。您已經告訴 JavaScriptassets從DataDto. DataDto沒有assets屬性,因此 Typescript 警告您您嘗試執行的操作不正確。你需要類似的東西
@ApiBearerAuth()
@UseGuards(AuthGuard('jwt'))
@UsePipes(new ValidationPipe({ transform: true }))
@Put(':id')
async uploadAssets(
@Request() req,
@Param('id') campaignId: string,
@Body() data: DataDto) {
try {
console.log("Data Check");
console.log(data);
const { assets } = data.data; // <-- notice the .data here
console.log(data.assets[0].asset_name);
console.log(JSON.stringify(data, null, 2));
const a = JSON.parse(JSON.stringify(data));
console.log(a)
console.log(assets)
return {
statusCode: HttpStatus.OK,
message: data,
};
} catch (error) {
Logger.log('Validation Error: ');
Logger.log(error);
throw new BadRequestException(error);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/377262.html
標籤:javascript 打字稿 控制器 嵌套 dto
下一篇:從所有鍵中洗掉下劃線前綴
