Javascript Graphql超高返回数组

Javascript Graphql超高返回数组,javascript,graphql,apollo,graphql-js,apollo-server,Javascript,Graphql,Apollo,Graphql Js,Apollo Server,我正在使用阿波罗服务器创建一个REST查询,该查询返回如下数据: { "symbol": "AAPL", "companyName": "Apple Inc.", "exchange": "Nasdaq Global Select", "industry": "Computer Hardware", "website": "http://www.apple.com", "description": "Apple Inc is an American multination

我正在使用阿波罗服务器创建一个REST查询,该查询返回如下数据:

{
  "symbol": "AAPL",
  "companyName": "Apple Inc.",
  "exchange": "Nasdaq Global Select",
  "industry": "Computer Hardware",
  "website": "http://www.apple.com",
  "description": "Apple Inc is an American multinational technology company. It designs, manufactures, and markets mobile communication and media devices, personal computers, and portable digital music players.",
  "CEO": "Timothy D. Cook",
  "issueType": "cs",
  "sector": "Technology",
  "tags": [
      "Technology",
      "Consumer Electronics",
      "Computer Hardware"
  ]
}
const typeDefs = gql`
    type Query{
        stock(symbol:String): Stock
    }

    type Stock {
        companyName: String
        exchange: String
        industry: String
        tags: String!
    }
`;
const resolvers = {
    Query:{
        stock: async(root, {symbol}, {dataSources}) =>{
            return dataSources.myApi.getSomeData(symbol)
        }
    }
};
class MyApiextends RESTDataSource{
    constructor(){
        super();
        this.baseURL = 'https://api.iextrading.com/1.0';
    }

    async getSomeData(symbol){
        return this.get(`/stock/${symbol}/company`)
    }
}

module.exports = MyApi
tags: [String]
我正在使用。我的
typeDefs
resolvers
如下所示:

{
  "symbol": "AAPL",
  "companyName": "Apple Inc.",
  "exchange": "Nasdaq Global Select",
  "industry": "Computer Hardware",
  "website": "http://www.apple.com",
  "description": "Apple Inc is an American multinational technology company. It designs, manufactures, and markets mobile communication and media devices, personal computers, and portable digital music players.",
  "CEO": "Timothy D. Cook",
  "issueType": "cs",
  "sector": "Technology",
  "tags": [
      "Technology",
      "Consumer Electronics",
      "Computer Hardware"
  ]
}
const typeDefs = gql`
    type Query{
        stock(symbol:String): Stock
    }

    type Stock {
        companyName: String
        exchange: String
        industry: String
        tags: String!
    }
`;
const resolvers = {
    Query:{
        stock: async(root, {symbol}, {dataSources}) =>{
            return dataSources.myApi.getSomeData(symbol)
        }
    }
};
class MyApiextends RESTDataSource{
    constructor(){
        super();
        this.baseURL = 'https://api.iextrading.com/1.0';
    }

    async getSomeData(symbol){
        return this.get(`/stock/${symbol}/company`)
    }
}

module.exports = MyApi
tags: [String]
数据源文件如下所示:

{
  "symbol": "AAPL",
  "companyName": "Apple Inc.",
  "exchange": "Nasdaq Global Select",
  "industry": "Computer Hardware",
  "website": "http://www.apple.com",
  "description": "Apple Inc is an American multinational technology company. It designs, manufactures, and markets mobile communication and media devices, personal computers, and portable digital music players.",
  "CEO": "Timothy D. Cook",
  "issueType": "cs",
  "sector": "Technology",
  "tags": [
      "Technology",
      "Consumer Electronics",
      "Computer Hardware"
  ]
}
const typeDefs = gql`
    type Query{
        stock(symbol:String): Stock
    }

    type Stock {
        companyName: String
        exchange: String
        industry: String
        tags: String!
    }
`;
const resolvers = {
    Query:{
        stock: async(root, {symbol}, {dataSources}) =>{
            return dataSources.myApi.getSomeData(symbol)
        }
    }
};
class MyApiextends RESTDataSource{
    constructor(){
        super();
        this.baseURL = 'https://api.iextrading.com/1.0';
    }

    async getSomeData(symbol){
        return this.get(`/stock/${symbol}/company`)
    }
}

module.exports = MyApi
tags: [String]
我可以运行查询并返回数据,但它不是在数组中格式化,并且在我运行以下查询时引发错误:

query{
  stock(symbol:"aapl"){
    tags
  }
}
错误:

{
  "data": {
    "stock": null
  },
  "errors": [
    {
      "message": "String cannot represent value: [\"Technology\", \"Consumer Electronics\", \"Computer Hardware\"]",
      "locations": [
        {
          "line": 3,
          "column": 5
        }
      ],
      "path": [
        "stock",
        "tags"
      ],
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR",
        "exception": {
          "stacktrace": [
            "TypeError: String cannot represent value: [\"Technology\", \"Consumer Electronics\", \"Computer Hardware\"]",
我期望的数据(技术、消费电子产品和计算机硬件)是正确的,但不会以数组形式返回。我尝试为标记创建一个新的
类型
,并使用tag属性设置它,但该值只返回
null


我对graphql非常陌生,因此任何反馈都非常感谢

股票
的类型定义中,您将
标签
字段的类型定义为
字符串

tags: String!
这告诉GraphQL期望一个不为null的字符串值。但是,REST端点返回的实际数据不是字符串,而是字符串数组。因此,您的定义应至少如下所示:

{
  "symbol": "AAPL",
  "companyName": "Apple Inc.",
  "exchange": "Nasdaq Global Select",
  "industry": "Computer Hardware",
  "website": "http://www.apple.com",
  "description": "Apple Inc is an American multinational technology company. It designs, manufactures, and markets mobile communication and media devices, personal computers, and portable digital music players.",
  "CEO": "Timothy D. Cook",
  "issueType": "cs",
  "sector": "Technology",
  "tags": [
      "Technology",
      "Consumer Electronics",
      "Computer Hardware"
  ]
}
const typeDefs = gql`
    type Query{
        stock(symbol:String): Stock
    }

    type Stock {
        companyName: String
        exchange: String
        industry: String
        tags: String!
    }
`;
const resolvers = {
    Query:{
        stock: async(root, {symbol}, {dataSources}) =>{
            return dataSources.myApi.getSomeData(symbol)
        }
    }
};
class MyApiextends RESTDataSource{
    constructor(){
        super();
        this.baseURL = 'https://api.iextrading.com/1.0';
    }

    async getSomeData(symbol){
        return this.get(`/stock/${symbol}/company`)
    }
}

module.exports = MyApi
tags: [String]
如果希望GraphQL在标记值为null时抛出,请在末尾添加感叹号以使其不可为null:

tags: [String]!
如果希望GraphQL在数组中的任何值为空时抛出,请在括号内添加感叹号。您还可以将这两者结合起来:

tags: [String!]!

欢迎来到SO!查看您的数据源代码也会很有帮助。你能更新你的问题,把它也包括进去吗?好的,我把它添加到问题中了