TypeError: String не может представлять значение: graphql Запрос не работает - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь запустить GraphQl Query, но он продолжает выдавать ошибку «Ошибка типа: строка не может представлять значение:».

Схема для моего запроса:

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

    type Query {
        getAllUsers: [User]!
    }

Мойresolver:

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

userAPI:

    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
  }
}

Поскольку мое письмо представляет собой строку, я получаю сообщение об ошибке "Stringне может представлять значение ".

1 Ответ

0 голосов
/ 31 октября 2019

То, что возвращается внутри вашего резольвера, должно соответствовать форме, указанной вашей схемой. Если ваша пользовательская схема имеет вид

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
  }
}
...