value.getTime не является функцией GraphQL. - PullRequest
1 голос
/ 19 января 2020

Я получаю ответ LASTUPDATE: 1579452599 от внешнего API,

Я хочу проанализировать значение в этом формате: Пн 19 Янв 2020 13:44:04, я попытался использовать пользовательский scallar, но я с этой ошибкой:

value.getTime не является функцией

enter image description here

Что я делаю не так?

Это мой код,

resolvers. js

import fetch from 'node-fetch';
import { GraphQLScalarType } from 'graphql';
import { Kind } from 'graphql/language';

export const resolvers = {
  Query: {
    getCrypto: async() => {
      const response = await fetch('https://min-api.cryptocompare.com/data/top/totalvolfull?limit=10&tsym=USD&api_key=260d15e639be7b967c2b0e4f9f3b6d656897ccbdfe772b1d24818d9f96d3a6ed')

      let data = await response.json()
      return data.Data[0].RAW.USD;

    }
  },
  Date: new GraphQLScalarType({
    name: 'Date',
    description: 'Date custom scalar type',
    parseValue(value) {
      return new Date(value); // value from the client
    },
    serialize(value) {
      console.log(value)
      return value.getTime(); // value sent to the client
    },
    parseLiteral(ast) {
      if (ast.kind === Kind.INT) {
        return parseInt(ast.value, 10); // ast value is always in string format
      }
      return null;
    },
  })
};

schema.graphql

type CryptoCurrency {
  FROMSYMBOL: String
  PRICE: Float
  TOSYMBOL: String  
  LASTUPDATE: Date
}

type Query {
  getCrypto: CryptoCurrency
}

scalar Date
type MyType {
   created: Date
}


В консоли я вижу значение enter image description here

1 Ответ

1 голос
/ 20 января 2020

В случае, если кто-то еще придет сюда из поиска Google для аналогичной проблемы
Вы должны преобразовать LASTUPDATE из отметки времени в фактическую дату и умножить на 1000, потому что Javascript использует миллисекунды.

   serialize(value) {
                console.log( new Date(value).toISOString())
                return new Date(value * 1000).toISOString(); // value sent to the client
            }
...