Как мутация graphql может принимать массив аргументов с помощью сервера apollo express? - PullRequest
0 голосов
/ 08 января 2019

Я создаю корзину покупок в своем веб-интерфейсе и хочу передать все элементы в корзине покупок в виде массива в мою мутацию addLicense на моем бэкэнде, чтобы мне не приходилось делать несколько вызовов API. Это возможно? Если да, то как или какие у меня варианты?

Я пытался добавить квадратные скобки вокруг аргументов, подобных этому

extend type Mutation {
    addLicense([
        licenseType: String!
        licenseAmount: String!
        isActive: Boolean
        expirationDate: Date!
    ]): License!
}

Я также пытался установить тип объекта в качестве аргумента

extend type Mutation {
    addLicense(
    license: [License]
): License!

Первая попытка выдает эту ошибку

/app/node_modules/graphql/language/parser.js:1463
throw (0, _error.syntaxError)(lexer.source, token.start, "Expected ".concat(kind, ", found ").concat((0, _lexer.getTokenDesc)(token)));
^
GraphQLError: Syntax Error: Expected Name, found [
at syntaxError 
(/app/node_modules/graphql/error/syntaxError.js:24:10)

Другая попытка выдает эту ошибку

Error: The type of Mutation.addLicense(license:) must be Input Type but got: [License].

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Я получил несколько советов на GraphQL Slack. Я решил это, добавив новый тип ввода.

input LicenseInput {
    id: ID
    licenseType: String!
    licenseAmount: String!
    isActive: Boolean
    expirationDate: Date
    course: String!
    organizationID: String!
    price: Int!
}

После этого я смог добавить свою мутацию примерно так

extend type Mutation {
    addLicense(
        license: [LicenseInput] <-
    ): License!
}
0 голосов
/ 08 января 2019

ваша мутация:

type Mutation {
    """
    Add multiple items to basket
    """
    addLicenses(licenses: [License!]!): LicenseMutationBatchResult
}

ваш интерфейс ввода:

input License {
    licenseType: String!
    licenseAmount: String!
    isActive: Boolean
    expirationDate: Date!
}

все, что вы возвращаете:

type LicenseMutationBatchResult {
    ...whatever you give back here...
}
...