Apollo服务器2.0。在文档中找不到“上传”类型

时间:2018-07-09 12:50:31

标签: graphql apollo apollo-server

如何复制:

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上,出现以下错误:

  

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

鉴于最新版本的apollo服务器,我是否应该在查询中添加其他内容?根据{{​​3}}教程和我目前不记得的其他一些资料,除了编写Upload之外,不需要做任何其他事情,它应该可以正常工作。我想念什么吗?

1 个答案:

答案 0 :(得分:4)

在阿波罗文档上的示例中,有几种方法可以解决此问题:

  

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

您可以看到他没有使用makeExecutableSchema,但是将解析器和架构传递给了apollo服务器,这停止了错误:

  

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

如果要使用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类型可解决包含以下内容的对象:

  • 文件名
  • mimetype
  • 编码

更新:Apollo明确指出,当您使用makeExecutableSchema时,需要定义使其运行的标量

  

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

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