NestJS/Prisma/Graphql 中十进制类型转换为字符串

问题描述 投票:0回答:1

我有一个类型为

Decimal
的字段,但是当我从客户端获取数据时,我收到的字段为
string
,它应该是
number

类型

我的对象类型:

import { Decimal } from '@prisma/client/runtime/library';
import { GraphQLDecimal } from 'prisma-graphql-type-decimal';

@ObjectType()
export class Supplier {
    @Field(() => GraphQLDecimal, {nullable:false})
    commission!: Decimal;
}

回应:

{
    // Other fields....
    id: 7;
    isConfirmed: false;
    webAppLanguage: 'fr';

    // Should be number
    commission: '0.3';
}

我尝试过的:

我尝试使用nestjs添加基于字段的中间件来将小数对象转换为数字类型,但没有成功。

export const decimalCastMiddleWare: FieldMiddleware = async (
    ctx: MiddlewareContext,
    next: NextFn,
) => {
    let value = await next();

    if (Decimal.isDecimal(value)) {
        value = value.toNumber();
    }

    return value;
};

// Middleware field-based
{
    buildSchemaOptions: {
        // Other ApolloDriverConfig config options...
        fieldMiddleware: [decimalCastMiddleWare]
    }
}
javascript graphql nestjs apollo prisma
1个回答
0
投票

来自这个答案,尝试一下

Sharing a transformer we use:

/// ColumnNumericTransformer
export class ColumnNumericTransformer {
  to(data: number): number {
    return data;
  }
  from(data: string): number {
    return parseFloat(data);
  }
}
in entity:

 @Column('numeric', {
    precision: 7,
    scale: 2,
    transformer: new ColumnNumericTransformer(),
  })
  public myNumericColumn: number;
© www.soinside.com 2019 - 2024. All rights reserved.