【问题标题】:TypeError: String cannot represent value: graphql Query not workingTypeError:字符串不能表示值:graphql 查询不起作用
【发布时间】:2023-04-05 16:06:01
【问题描述】:

我正在尝试运行 graphql 查询,但它一直给我“TypeError:字符串不能代表值:”错误。

我的查询的架构:

    type User {
        active: Boolean!
        email: String!
        fullname: String!
        description: String!
        tags: [String!]!
    }

    type Query {
        getAllUsers: [User]!
    }

我的解析器:

Query: {
        getAllUsers: (_, __, { dataSources }) => {
            return dataSources.userAPI.getAllUsers();
        }
    }

用户API:

    getAllUsers() {
        const params = {
            TableName: 'Users',
            Select: 'ALL_ATTRIBUTES'
        };

        return new Promise((resolve, reject) => {
            dynamodb.scan(params, function(err, data) {
                if (err) {
                    console.log('Error: ', err);
                    reject(err);
                } else {
                    console.log('Success');
                    resolve(data.Items);
                }
            });
        });
    }

查询:

query getAllUsers{
  getAllUsers{
    email
  }
}

由于我的电子邮件是一个字符串,我得到的错误是“字符串不能代表值”。

【问题讨论】:

  • 输入 setInput { 电子邮件:字符串! } getAllUsers(输入:setInput):[用户]
  • 请告诉我你想要什么?您是否想要具有电子邮件地址或其他值等条件的用户对象
  • @MaheshBhatnagar 我希望查询返回一组用户电子邮件。不需要输入,因为我正在尝试返回所有这些,所以我没有设置任何条件
  • 请写下查询 getAllUsers{ getAllUsers{ User[email] } }
  • 那行不通,不能在查询中包含 []。现在它给了我语法错误

标签: node.js graphql apollo


【解决方案1】:

解析器中返回的内容应与架构指定的形状相匹配。如果您的用户架构是

type User {
  active: Boolean!
  email: String!
  fullname: String!
  description: String!
  tags: [String!]!
}

那么您返回的用户数组应如下所示:

[{
  active: true,
  email: 'kaisinnn@li.com',
  fullname: 'Kaisin Li',
  description: 'Test',
  tags: ['SOME_TAG']
}]

您实际返回的数据的形状大不相同:

[{
  active: {
    BOOL: true
  },
  description: {
    S: 'Test'
  },
  fullname: {
    S: 'Kaisin Li'
  },
  email: {
    S: 'kaisinnn@li.com'
  },
}]

您需要要么映射您从扫描操作中获得的数组并将结果转换为正确的形状,或者为每个单独的字段编写解析器。例如:

const resolvers = {
  User: {
    active: (user) => user.active.BOOL,
    description: (user) => user.description.S,
    // and so on
  }
}

【讨论】:

    猜你喜欢
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 2012-06-15
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    相关资源
    最近更新 更多