GraphQL.js - 时间戳标量类型?
GraphQL.js - timestamp scalar type?
我正在以编程方式构建 GraphQL 模式,需要 Timestamp
标量类型; Unix Epoch timestamp 标量类型:
const TimelineType = new GraphQLObjectType({
name: 'TimelineType',
fields: () => ({
date: { type: new GraphQLNonNull(GraphQLTimestamp) },
price: { type: new GraphQLNonNull(GraphQLFloat) },
sold: { type: new GraphQLNonNull(GraphQLInt) }
})
});
不幸的是,GraphQL.js 没有 GraphQLTimestamp
也没有 GraphQLDate
类型,所以上面的方法不起作用。
我期待 Date
输入,我想将其转换为时间戳。我将如何创建自己的 GraphQL 时间戳类型?
有一个 NPM 包,其中包含一组符合 RFC 3339 的 date/time GraphQL 标量类型; graphql-iso-date.
但对于初学者,您应该使用 GraphQLScalarType
以编程方式在 GraphQL 中构建您自己的标量类型:
/** Kind is an enum that describes the different kinds of AST nodes. */
import { Kind } from 'graphql/language';
import { GraphQLScalarType } from 'graphql';
const TimestampType = new GraphQLScalarType({
name: 'Timestamp',
serialize(date) {
return (date instanceof Date) ? date.getTime() : null
},
parseValue(date) {
try { return new Date(value); }
catch (error) { return null; }
},
parseLiteral(ast) {
if (ast.kind === Kind.INT) {
return new Date(parseInt(ast.value, 10));
}
else if (ast.kind === Kind.STRING) {
return this.parseValue(ast.value);
}
else {
return null;
}
},
});
但不是重新发明轮子,这个问题(#550) was already discussed and Pavel Lang came up with a decent GraphQLTimestamp.js解决方案(我的TimestampType
是从他那里派生出来的)。
我正在以编程方式构建 GraphQL 模式,需要 Timestamp
标量类型; Unix Epoch timestamp 标量类型:
const TimelineType = new GraphQLObjectType({
name: 'TimelineType',
fields: () => ({
date: { type: new GraphQLNonNull(GraphQLTimestamp) },
price: { type: new GraphQLNonNull(GraphQLFloat) },
sold: { type: new GraphQLNonNull(GraphQLInt) }
})
});
不幸的是,GraphQL.js 没有 GraphQLTimestamp
也没有 GraphQLDate
类型,所以上面的方法不起作用。
我期待 Date
输入,我想将其转换为时间戳。我将如何创建自己的 GraphQL 时间戳类型?
有一个 NPM 包,其中包含一组符合 RFC 3339 的 date/time GraphQL 标量类型; graphql-iso-date.
但对于初学者,您应该使用 GraphQLScalarType
以编程方式在 GraphQL 中构建您自己的标量类型:
/** Kind is an enum that describes the different kinds of AST nodes. */
import { Kind } from 'graphql/language';
import { GraphQLScalarType } from 'graphql';
const TimestampType = new GraphQLScalarType({
name: 'Timestamp',
serialize(date) {
return (date instanceof Date) ? date.getTime() : null
},
parseValue(date) {
try { return new Date(value); }
catch (error) { return null; }
},
parseLiteral(ast) {
if (ast.kind === Kind.INT) {
return new Date(parseInt(ast.value, 10));
}
else if (ast.kind === Kind.STRING) {
return this.parseValue(ast.value);
}
else {
return null;
}
},
});
但不是重新发明轮子,这个问题(#550) was already discussed and Pavel Lang came up with a decent GraphQLTimestamp.js解决方案(我的TimestampType
是从他那里派生出来的)。