Почему «refproductoptions.getProductOptions не является функцией» в этом распознавателе GraphQL? - PullRequest
0 голосов
/ 25 июня 2019

Я использую три таблицы из ассоциативных отношений.Родительские «продукты» имеют идентификатор, который связан с таблицей RefProductOptions.productID.Это прекрасно работает с моими распознавателями, и GraphQL отвечает правильно.

Когда я представляю третью таблицу "productoptions" и пытаюсь добавить слой ассоциации между "refproductoptions.optionId" с "productoptions.id", GraphQLискать не удается.

The GraphQL error message is:
{
  "errors": [
    {
      "message": "refproductoptions.getProductOptions is not a function",
      "locations": [
        {
          "line": 13,
          "column": 7
        }
      ],
      "path": [
        "products",
        "refproductoptions",
        0,
        "productoptions"
      ],
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR",
        "exception": {
          "stacktrace": [
            "TypeError: refproductoptions.getProductOptions is not a function",
            "    at productoptions (/home/bob/graphql-server/src/resolvers.js:35:35)",
            "    at field.resolve (/home/bob/graphql-server/node_modules/graphql-extensions/dist/index.js:140:26)",
...

Я просмотрел свой код, чтобы убедиться, что я уважаю ссылки и их регистр.

// src/resolvers.js

const resolvers = {
    Query: {
        async products (root, { name }, { models }) {
            let searchCriteria = {where: { name } };
            return await models.Products.findOne(searchCriteria);
        },
        async refproductoptions (root, { productId }, { models }) {
            let searchCriteria = {where: { productId } };
            //console.log( searchCriteria );
            return await models.RefProductOptions.findOne(searchCriteria);
        },
        async productoptions (root, { id }, { models }) {
            let searchCriteria = {where: { id } };
            console.log ( searchCriteria );
            return await models.ProductOptions.findOne(searchCriteria);
        },
    },
    Products: {
        async refproductoptions (products) {
            return products.getRefProductOptions()
        }
    },
    RefProductOptions: {
        async productoptions (refproductoptions) {
            console.log("====================== RefProductOptions");
            return refproductoptions.getProductOptions()
        }
    },
    /*
    ProductOptions: {
        async refproductoptions (productoptions) {
            return productoptions.getRefProductOptions()
        }
    }
    */
}

module.exports = resolvers

Если я выполню этот запрос:

{
  products (name: "Test Product") {
    name
    urlWordRef
    seoTitle
    seoDescription
    standardEquipment
    technicalSpecs
    refproductoptions {
      id
      productId
      optionId
    }
  }
}

Я получаю хорошие результаты.Тем не менее, если я добавлю часть запроса по продукту в приведенном ниже запросе, произойдет сбой с отмеченной выше ошибкой.

{
  products (name: "test") {
    name
    urlWordRef
    seoTitle
    seoDescription
    standardEquipment
    technicalSpecs
    refproductoptions {
      id
      productId
      optionId
      productoptions {
        name
      }
    }
  }
}

Кроме того, этот запрос также не будет выполнен:

{
  refproductoptions(productId: 1) {
    id
    productId
    optionId
    productoptions {
      name
    }
  }
}
...