graphql类型定义中的日期和Json
在我的graphql模式中是否可以将字段定义为Date或JSONgraphql类型定义中的日期和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
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”);