Reputation: 966
I call service via grpc in nest js and when it return empty array the property not returned in object
@Get()
@Public()
async findAll(
@Query()
request: PaginationQuery,
) {
try {
const res$ = this.svc.getAll(request);
const { error, ...rest } = await firstValueFrom(res$);
if (error) {
throw new BadRequestException(error);
}
return rest;
} catch (e) {
this.logger.error(e);
return new InternalServerErrorException(e);
}
}
I logged the result before it returned to client service it was
{
"id": "457a508b-f19a-4c77-b8a2-bb4004b9277b",
"name": "plan1",
"key": "plan1",
"price": 20,
"yearlyDiscountRate": 0.2,
"trialDays": 14,
"isRecommended": true,
"isLegacy": false,
"features": []
}
but when it return to client via grpc it was
{
"id": "457a508b-f19a-4c77-b8a2-bb4004b9277b",
"name": "plan1",
"key": "plan1",
"price": 20,
"yearlyDiscountRate": 0.2,
"trialDays": 14,
"isRecommended": true,
"isLegacy": false
}
the features
key with empty array not found.
I tried some things like add loader with arrays:true
const app = await NestFactory.createMicroservice<MicroserviceOptions>(
SubscriptionsModule,
{
transport: Transport.GRPC,
options: {
url: '0.0.0.0:50052',
package: protobufPackage,
protoPath: join(process.cwd(), 'libs/proto/src/subscriptions.proto'),
loader: {
arrays: true,
},
},
},
);
but it still not return property with empty array
Upvotes: 1
Views: 904
Reputation: 966
I found the answer it was from line
if (error) {
throw new BadRequestException(error);
}
when arrays: true
the if condition be true and throw an error.
solved with
if (error?.length) {
throw new BadRequestException(error);
}
Upvotes: 1