Можно ли определить поле как Date или JSON в моей схеме graphql?
type Individual {
id: Int
name: String
birthDate: Date
token: JSON
}
на самом деле сервер возвращает мне сообщение об ошибке:
Type "Date" not found in document.
at ASTDefinitionBuilder._resolveType (****node_modules\graphql\utilities\buildASTSchema.js:134:11)
И такая же ошибка для JSON ...
Любая идея ?


Взгляните на кастомные скаляры: https://www.apollographql.com/docs/graphql-tools/scalars.html
создайте новый скаляр в своей схеме:
scalar Date
type MyType {
created: Date
}
и создайте новый резолвер:
import { GraphQLScalarType } from 'graphql';
import { Kind } from 'graphql/language';
const resolverMap = {
Date: new GraphQLScalarType({
name: 'Date',
description: 'Date custom scalar type',
parseValue(value) {
return new Date(value); // value from the client
},
serialize(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;
},
}),
как запрос в этом примере ?. 10.02.1993 ??
Просто хотел упомянуть, что этот фрагмент работает, только если дата, которую вы передаете, является числом. Например, «2020-01-01», хотя и является допустимой датой, не будет проанализирован, поскольку он только ожидает числа.
Примитивные скалярные типы в GraphQL - это Int, Float, String, Boolean и ID. Для JSON и Date вам нужно определить свои собственные скалярные типы, документация довольно ясно показывает, как это сделать.
В свою схему вы должны добавить:
scalar Date
type MyType {
created: Date
}
Затем в свой код вам нужно добавить реализацию типа:
import { GraphQLScalarType } from 'graphql';
const dateScalar = new GraphQLScalarType({
name: 'Date',
parseValue(value) {
return new Date(value);
},
serialize(value) {
return value.toISOString();
},
})
Наконец, вы должны включить этот настраиваемый скалярный тип в свои преобразователи:
const server = new ApolloServer({
typeDefs,
{
Date: dateScalar,
// Remaining resolvers..
},
});
Эта реализация Date проанализирует любую строку, принимаемую Date конструктор, и вернет дату в виде строки в формате ISO.
Для JSON вы можете использовать graphql-type-json и импортировать его, как показано здесь.
Хотя решения, приведенные в этой ветке, аппетитны и полны. Я видел, что когда вы используете такие адаптеры, как github.com/Soluto/graphql-to-mongodb - тогда мы не можем создавать наши собственные типы - поэтому в этой ситуации я напрямую сохраняю даты как время в миллисекундах в БД и использую тип с плавающей запятой. js имел (new Date ()). getTime () для помощи и использовал преобразователь, чтобы преобразовать его в требуемый формат даты в виде строки везде, где это необходимо - new Date (1324339200000); date.toString ("дд МММ");