Назначение JSON в типе GraphQL в Nodejs

1

Я вызываю API отчетов с помощью Nodejs, который дает мне ответ JSON. Апи можно вызвать с другим идентификатором (в данном случае с другим идентификатором отчета). Например:

  https://report.domain.io/report/1
  https://report.domain.io/report/2

и так далее. Поскольку идентификатор отличается в разное время, он даст мне разные ответы. Имя атрибута будет другим. Поэтому я не могу сопоставить его в GraphQLObjectType. Например, если ответ JSON следующий:

[
    {
        "modelbrand": "Sony",
        "modelcode": "F3111",
        "avg_free_storage": 225401514
    },
    {
        "modelbrand": "Sony",
        "modelcode": "F3111",
        "avg_free_storage": 224547840
    }
]

Тогда я могу сопоставить его с GraphQL следующим образом:

Report() {
    return new graphql.GraphQLObjectType({
        name: "Report",
        description: "This represents report",
            fields: () => ({
                "modelbrand": {type: graphql.GraphQLString},
                "modelcode": {type: graphql.GraphQLString},
                "avg_free_storage": {type: graphql.GraphQLString}
            })
    });
}

потому что я знаю, что атрибуты исправлены. Но если имя атрибута /s, например modelbrand, код модели изменяется на что-то другое (очевидно, что это будет отличаться для разных отчетов), тогда я не могу сопоставить его в GraphQLObjectType. В этом случае мне нужен другой тип (который должен быть JSON-типом) для сопоставления этих ответов. К сожалению, он недоступен как примитивный тип для GraphQL. Я не нахожу какой-либо пользовательский/скалярный тип или библиотеку узлов для решения этой проблемы. В переполнении стека есть решение, но похоже, что оно не работает.

Могу ли я получить решение для этого? Будет оценен пример Nodejs. Благодарю.

Теги:
graphql

1 ответ

1

Пожалуйста, обратитесь к этому graphql-type-json. Это можно использовать как пользовательский скалярный тип json.

В файле схемы

scalar JSON

type User {
  id: ID!
    userDetails: JSON
}

type Query {
  getUser(id: ID!): User
}

В файле resolver

import GraphQLJSON from 'graphql-type-json';
import {User} from './connectors';

const resolvers = {

  Query: getUser(_, args) {
    return User.find({
      where: args
    });
  },

  JSON: {
    __serialize(value) {
      return GraphQLJSON.parseValue(value);
    }
  }
}

Это может помочь вам

Ещё вопросы

Сообщество Overcoder
Наверх
Меню