graphql类型定义中的日期和Json

graphql类型定义中的日期和Json,graphql,apollo,Graphql,Apollo,在我的graphql模式中是否可以将字段定义为Date或JSON type Individual { id: Int name: String birthDate: Date token: JSON } 实际上,服务器正在返回一个错误,说明: Type "Date" not found in document. at ASTDefinitionBuilder._resolveType (****node_modules\graphql\utilities\bui

在我的graphql模式中是否可以将字段定义为Date或JSON

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也有同样的错误


有什么想法吗?

看看自定义标量:

在架构中创建新标量:

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;
    },
  }),
原语是
Int
Float
String
Boolean
ID
。对于
JSON
Date
而言,您需要定义自己的自定义标量类型,这一点非常清楚

在模式中,您必须添加:

scalar Date

type MyType {
   created: Date
}
然后,您必须在代码中添加类型实现:

从'graphql'导入{GraphQLScalarType};
const dateScalar=new GraphQLScalarType({
姓名:'日期',
解析值(value){
返回新日期(值);
},
序列化(值){
返回值。toISOString();
},
})
最后,您必须在解析器中包含此自定义标量类型:

const server=新服务器({
typeDefs,
{
日期:dateScalar,
//剩余的解析程序。。
},
});
Date
实现将解析接受的任何字符串,并将以ISO格式的字符串形式返回日期


对于
JSON
您可以使用并导入它,如图所示。

该示例中的查询如何?。1993年2月10日??我只想提到,只有当您传递的日期是数字时,此代码段才有效。例如,“2020-01-01”虽然是一个有效的日期,但不会被解析,因为它只需要一个数字就可以了。而本文给出的解决方案是开胃的和完整的。我已经看到,当您使用适配器时,比如-那么我们就不能创建自己的类型-所以在这种情况下,我直接在DB中以毫秒为单位存储日期,并使用浮点类型。js had(new Date()).getTime()帮助并使用解析器将其转换为所需的日期格式,如有需要,将其转换为字符串格式-new Date(1324339200000);日期:toString(“MMM dd”);