代码之家  ›  专栏  ›  技术社区  ›  u-ways

js-时间戳标量类型?

  •  1
  • u-ways  · 技术社区  · 7 年前

    我正在以编程方式构建GraphQL模式,需要 Timestamp 标量类型;a 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时间戳类型?

    1 回复  |  直到 7 年前
        1
  •  3
  •   u-ways    7 年前

    有一个NPM包,包含一组RFC 3339兼容的日期/时间图ql标量类型; 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 GraphQLTimestamp.js 解决方案(我的 TimestampType