У меня есть этот сервер API для нумерации учетных записей
{
accounts (offset: 2, limit: 1) {
key
name
}
}
Все хорошо работает с использованием Graphiql
{
"data": {
"accounts": [
{
"key": "fde3d97d-6a44-4c36-bc59-149a3e8e51ac",
"name": "a0f353611567c83e"
}
]
}
}
Я следовал документам Apollo, чтобы подключить мой веб-клиент к бэкэнду.
Запросы по умолчанию работают, но когда я пытаюсь добавить переменные, я получаю эту ошибку на стороне сервера.
WARN g.GraphQL - Query failed to validate : 'query Accounts($offset: Int, $limit: Int) {
accounts(offset: $offset, limit: $limit) {
key
name
__typename
}
}
мой угловой код (7) выглядит так:
import { Component, OnInit } from "@angular/core";
import { Apollo, QueryRef } from "apollo-angular";
import { DocumentNode } from "graphql";
import { Observable, Subscription } from "rxjs";
import gql from "graphql-tag";
const ACCOUNTS = gql`
query Accounts($offset: Int, $limit: Int) {
accounts(offset: $offset, limit: $limit) {
key
name
}
}
`;
@Component({
selector: "app-accounts",
templateUrl: "./accounts.component.html",
styleUrls: ["./accounts.component.scss"]
})
export class AccountsComponent implements OnInit {
private data: Observable<any>;
constructor(private apollo: Apollo) {}
ngOnInit() {
this.data = this.apollo.watchQuery({
query: ACCOUNTS,
variables: {
offset: 0,
limit: 3
}
}).valueChanges;
}
}
казалось, что GQL вообще не анализируется, когда вводятся параметры (переменные).
Есть предложения?
EDIT
после перехода на новый генератор кода Apollo у меня есть все типы, извлеченные с сервера, и все типы, сгенерированные для меня.
Тем не менее, я не знаю, почему запрос не работает с переменными.
import { Component, OnInit } from "@angular/core";
import { Observable } from "rxjs";
import { map } from "rxjs/operators";
import { AccountsGQL, Account } from "../generated/graphql";
@Component({
selector: "app-accounts",
templateUrl: "./accounts.component.html",
styleUrls: ["./accounts.component.scss"]
})
export class AccountsComponent implements OnInit {
private data: Observable<Account[]>;
constructor(private accountsGQL: AccountsGQL) {}
ngOnInit() {
this.data = this.accountsGQL
.watch({ offset: 0, limit: 1 })
.valueChanges.pipe(map(result => result.data.accounts));
}
}
'offset' привел нулевое значение для ненулевого типа 'Int!'