【问题标题】:Apollo server 2.0. Type "Upload" not found in document阿波罗服务器 2.0。在文档中找不到类型“上传”
【发布时间】:2018-12-17 03:58:50
【问题描述】:

如何复制:

server.js

const { ApolloServer, makeExecutableSchema, gql } = require('apollo-server');

const typeDefs = gql`
type Mutation {
    uploadAvatar(upload: Upload!): String!
}
`;
const resolvers = {
    Mutation: {
        uploadAvatar(root, args, context, info) {
            return 'test';
        }
    }
  };

const schema = makeExecutableSchema({ typeDefs, resolvers });

const server = new ApolloServer({
  schema,
});

server.listen().then(({ url }) => {
  console.log(`???? Server ready at ${url}`);
});

package.json

"dependencies": {
    "apollo-server": "^2.0.0-rc.6",
    "graphql": "^0.13.2"
  }

在节点 server.js 上,我们收到以下错误:

在文档中找不到类型“上传”。

鉴于最新版本的阿波罗服务器,我应该在查询中添加任何其他内容吗?根据this 教程和我目前不记得的一些其他来源,除了写上传之外不需要做任何事情,它应该可以正常工作。我错过了什么吗?

【问题讨论】:

  • 它似乎应该可以正常工作:``` Apollo Server 2.0 自动将 Upload 标量添加到模式中,因此应该删除模式中任何现有的标量 Upload 声明。 ```

标签: graphql apollo apollo-server


【解决方案1】:

在 apollo 文档的示例中,我有几种方法解决了这个问题:

https://www.apollographql.com/docs/guides/file-uploads.html

你可以看到他没有使用makeExecutableSchema,而是将解析器和模式传递给了阿波罗服务器,这停止了错误:

在文档中找不到类型“上传”。

如果你想使用makeExecutableSchema 然后导入标量

const typeDefs = gql`
  scalar Upload

  type Mutation {
    uploadAvatar(upload: Upload!): String!
  }
  type Query {
    ping: String
  }
`;

https://github.com/jaydenseric/apollo-upload-examples/blob/master/api/schema.mjs

如果您查看 at 博客文章的一些示例源代码,您会发现他使用了一个标量

没有自动添加的原因是

标量上传 Apollo Server 自动添加到架构中的 Upload 类型解析包含以下内容的对象:

  • 文件名
  • 模仿类型
  • 编码

更新: Apollo 更清楚地表明,当您使用 makeExecutableSchema 时,您需要定义标量才能使其工作

在使用 makeExecutableSchema 手动设置模式并使用模式参数传递给 ApolloServer 构造函数的情况下,将上传标量添加到类型定义并上传到解析器

https://www.apollographql.com/docs/guides/file-uploads.html#File-upload-with-schema-param

【讨论】:

    猜你喜欢
    • 2021-09-09
    • 2019-02-08
    • 2020-10-18
    • 2021-10-21
    • 2019-03-06
    • 2021-04-29
    • 1970-01-01
    • 2018-09-09
    • 2020-06-27
    相关资源
    最近更新 更多