Apollo Server:Eject 内置“上传”类型以使用 graphql-codegen 生成 TS 类型
Posted
技术标签:
【中文标题】Apollo Server:Eject 内置“上传”类型以使用 graphql-codegen 生成 TS 类型【英文标题】:Apollo Server: Eject built in "Upload" Type to generate TS Types with graphql-codegen 【发布时间】:2020-03-22 20:02:37 【问题描述】:我正在使用graphql-codegen
来生成我的 GraphQL TypeDef 文件的 TS 类型。我还使用来自 apollo 服务器的内置 Upload
类型来处理文件上传,但 Upload TypeDef 不在我自己的模式中,它内置在 apollo-server 本身的某个地方。当我尝试通过graphql-codegen
生成时,我收到一个错误:
Error: Unknown type "Upload". Did you mean "Float"?
Unknown type "Upload". Did you mean "Float"?
因为它不在我自己的 typedef 文件中。
我可以以某种方式eject
内置的阿波罗“上传”类型来自己添加 typedef 吗?
【问题讨论】:
【参考方案1】:我遇到了同样的问题。您必须定义自己的上传类型,在 codegen.yml
配置文件中定义自定义标量,以及其他一些内容。
# codegen.yml
config:
scalars:
Date: Date
Upload: FileUpload
您可以使用 graphql-codegen (@graphql-codegen/add
) 的插件添加内容在生成的文件中导入自定义 FileUpload 类型:
# codegen.yml
generates:
# Schema ans resolvers types
./src/graphql/generated/schema.types.ts:
plugins:
- add:
content: "import FileUpload from \"path/to/your/type/file\""
- typescript
import ReadStream from "fs"
export interface FileUpload
filename: string
mimetype: string
encoding: string
createReadStream(): ReadStream
顺便说一句,你应该安装@types/node
。
而且,为了使事情更简单,您必须在您的 graphql 模式中定义一个标量(否则 graphl-cogeden 会告诉您 Upload
是未知的。
所以:
# schema.graphql
scalar Upload
而且,如果您使用 Apollo Server 2,默认 Apollo 的行为是在您的架构中自动添加 scalar Upload
,因此您需要使用 makeExecutableSchema
from,graphql-tools
!
const server = new ApolloServer(
schema: makeExecutableSchema(
typeDefs: schema,
resolvers,
)
享受吧!
【讨论】:
以上是关于Apollo Server:Eject 内置“上传”类型以使用 graphql-codegen 生成 TS 类型的主要内容,如果未能解决你的问题,请参考以下文章
graphql apollo-server 中的文件上传错误
使用 typegraphql (Apollo Server) 上传文件
为啥当我使用 apollo-server 上传文件时,文件已上传但文件为 0kb?
无法使用 apollo-server-micro 和 NextJS 上传 1MB 以上的文件