programing

그래프QL 큰 정수 오류:Int는 32비트 부호가 없는 정수 값을 나타낼 수 없습니다.

bestprogram 2023. 7. 16. 13:45

그래프QL 큰 정수 오류:Int는 32비트 부호가 없는 정수 값을 나타낼 수 없습니다.

UNIX 타임스탬프를 저장하려고 합니다.MongoDB사용.GraphQL그러나 GraphQL은 정수를 처리하는 데 한계가 있습니다.아래의 변환을 참조하십시오.

const addUser = {
    type: UserType,
    description: 'Add an user',
    args: {
        data: {
            name: 'data',
            type: new GraphQLNonNull(CompanyInputType)
        }
    },
    resolve(root, params) {

        params.data.creationTimestamp = Date.now();

        const model = new UserModel(params.data);
        const saved = model.save();

        if (!saved)
            throw new Error('Error adding user');

        return saved;
    }
}

결과:

  "errors": [
    {
      "message": "Int cannot represent non 32-bit signed integer value: 1499484833027",
      "locations": [
        {
          "line": 14,
          "column": 5
        }
      ],
      "path": [
        "addUser",
        "creationTimestamp"
      ]
    }

현재 사용 중입니다.GraphQLInteger유형 정의의 이 필드:

creationTimestamp: { 
    type: GraphQLInt
}

더 큰 것이 없다면 어떻게 그 상황을 해결할 수 있습니까?GraphQLInt에서 이용할 수 있는.GraphQL?

GraphQL은 오류가 나타내는 32비트보다 큰 정수를 지원하지 않습니다.GraphQL Date와 같은 사용자 지정 스칼라를 사용하는 것이 좋습니다.여기에 "긴" 유형도 있습니다.아니면 자신만의 맞춤형을 굴릴 수도 있습니다. 여기 아폴로의 훌륭한 예가 있습니다.

GraphQL이 더 큰 것을 지원하지 않는 이유가 궁금하다면 Github에서 이 문제를 확인할 수 있습니다.

⚠️정밀도가 떨어질 수 있으므로 권장하지 않음...

하지만 빠른 수정을 원한다면(아마도 사용자 정의 스칼라를 구현할 시간이 없을 것이다),Float대신 타이핑합니다.Int.

언급URL : https://stackoverflow.com/questions/44982279/graphql-large-integer-error-int-cannot-represent-non-32-bit-signed-integer-valu