NodeJS / GraphQL:尝试使用自定义DateTime标量,但出现错误

时间:2019-08-23 03:14:46

标签: node.js graphql graphql-js

我正在跟踪一个教程,其中老师在他的<xcdg:Column> <xcdg:Column.CellContentTemplate> <DataTemplate> <xcdg:DataGridControl ItemsSource="{Binding Items2}"> <xcdg:Column FieldName="Id"> </xcdg:Column> </xcdg:DataGridControl> </DataTemplate> </xcdg:Column.CellContentTemplate> </xcdg:Column> 字段中使用String类型,并建议如果需要,可以使用自定义标量类型来创建更强类型的{{1} }字段,因此我正尝试这样做。

我遇到以下错误:createdAt

这是有问题的代码:

DateTime

我已经添加了Error: Unknown type "GraphQLDateTime".库,而VSCode的intellisense对此有所了解,所以我知道这不是问题。这也表明即使我引用了const { gql } = require('apollo-server') const { GraphQLDateTime } = require('graphql-iso-date') module.exports = gql` type Post { id: ID! username: String! body: String! createdAt: GraphQLDateTime! } type User { id: ID! email: String! token: String! username: String! createdAt: GraphQLDateTime! } input RegisterInput { username: String! password: String! confirmPassword: String! email: String! } type Query { getPosts: [Post] getPost(postId: ID!): Post } type Mutation { register(registerInput: RegisterInput): User login(username: String!, password: String!): User! createPost(body: String!): Post! deletePost(postId: ID!): String! } ` ,也未在文件中的任何地方使用它。

我知道这可能是一个简单的解决方法,但是在NodeJS的上下文中,我还是NodeJS和GraphQL的新手。知道我在做什么错吗?还有另一种DateTime标量可能更可取(最佳做法始终是个好主意。)谢谢!

1 个答案:

答案 0 :(得分:1)

使用'<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="127-0" class="displacy" width="750" height="224.5" style="max-width: none; height: 224.5px; color: #000000; background: #ffffff; font-family: Arial">\n<text class="displacy-token" fill="currentColor" text-anchor="middle" y="134.5">\n <tspan class="displacy-word" fill="currentColor" x="50">My</tspan>\n <tspan class="displacy-tag" dy="2em" fill="currentColor" x="50">ADJ</tspan>\n</text>\n\n<text class="displacy-token" fill="currentColor" text-anchor="middle" y="134.5">\n <tspan class="displacy-word" fill="currentColor" x="225">name</tspan>\n <tspan class="displacy-tag" dy="2em" fill="currentColor" x="225">NOUN</tspan>\n</text>\n\n<text class="displacy-token" fill="currentColor" text-anchor="middle" y="134.5">\n <tspan class="displacy-word" fill="currentColor" x="400">is</tspan>\n <tspan class="displacy-tag" dy="2em" fill="currentColor" x="400">VERB</tspan>\n</text>\n\n<text class="displacy-token" fill="currentColor" text-anchor="middle" y="134.5">\n <tspan class="displacy-word" fill="currentColor" x="575">Dhiraj.</tspan>\n <tspan class="displacy-tag" dy="2em" fill="currentColor" x="575">PROPN</tspan>\n</text>\n\n<g class="displacy-arrow">\n <path class="displacy-arc" id="arrow-127-0-0" stroke-width="2px" d="M70,89.5 C70,2.0 225.0,2.0 225.0,89.5" fill="none" stroke="currentColor"/>\n <text dy="1.25em" style="font-size: 0.8em; letter-spacing: 1px">\n <textPath xlink:href="#arrow-127-0-0" class="displacy-label" startOffset="50%" fill="currentColor" text-anchor="middle">poss</textPath>\n </text>\n <path class="displacy-arrowhead" d="M70,91.5 L62,79.5 78,79.5" fill="currentColor"/>\n</g>\n\n<g class="displacy-arrow">\n <path class="displacy-arc" id="arrow-127-0-1" stroke-width="2px" d="M245,89.5 C245,2.0 400.0,2.0 400.0,89.5" fill="none" stroke="currentColor"/>\n <text dy="1.25em" style="font-size: 0.8em; letter-spacing: 1px">\n <textPath xlink:href="#arrow-127-0-1" class="displacy-label" startOffset="50%" fill="currentColor" text-anchor="middle">nsubj</textPath>\n </text>\n <path class="displacy-arrowhead" d="M245,91.5 L237,79.5 253,79.5" fill="currentColor"/>\n</g>\n\n<g class="displacy-arrow">\n <path class="displacy-arc" id="arrow-127-0-2" stroke-width="2px" d="M420,89.5 C420,2.0 575.0,2.0 575.0,89.5" fill="none" stroke="currentColor"/>\n <text dy="1.25em" style="font-size: 0.8em; letter-spacing: 1px">\n <textPath xlink:href="#arrow-127-0-2" class="displacy-label" startOffset="50%" fill="currentColor" text-anchor="middle">attr</textPath>\n </text>\n <path class="displacy-arrowhead" d="M575.0,91.5 L583.0,79.5 567.0,79.5" fill="currentColor"/>\n</g>\n</svg>' apollo-server添加自定义标量有两个步骤:

  1. 将标量定义添加到类型定义中:

    graphql-tools
  2. 将实际的GraphQLScalar添加到您的解析器映射中:

    scalar DateTime
    

请注意,解析器映射中的键(此处使用的是const { GraphQLDateTime } = require('graphql-iso-date') const resolvers = { /* your other resolvers */ DateTime: GraphQLDateTime, } )必须与您在步骤1中用作标量名称的名称匹配。这也将是您在类型定义中使用的名称。名称本身是任意的,但需要匹配。

有关更多详细信息,请参见the docs