Запрос GraphQL выдает ошибку, но он все равно обновляет мою базу данных

Я создаю проект в React, используя apollo-server-express,graphQL и postgreSQL, я выполнил определения типов, а также некоторые запросы и мутации, но есть 3 конкретных, которые работают неправильно.

Все трое выдают одну и ту же ошибку, поэтому я покажу только одну мутацию. В моем postgreSQL я создал эту таблицу:

CREATE TABLE IF NOT EXISTS tb_evaluator(
    id SERIAL NOT NULL,
    name VARCHAR(255) NOT NULL,
    profession VARCHAR(255) NOT NULL,
    performance_exp VARCHAR(20) NOT NULL,
    app_exp VARCHAR(20) NOT NULL,
    ag_exp VARCHAR(20) NOT NULL,
    evaluation_date VARCHAR(255) NOT NULL,
    PRIMARY KEY (id)
);

Затем в своем проекте я создал js-файл с определениями типов, запросами и мутациями.

const { gql } = require('apollo-server-express')

const typedefs = gql`
type Evaluator {
  id: ID!
  name: String!
  profession: String!
  performanceExp: String!
  appExp: String!
  agExp: String!
  evaluationDate: String!
}

type Mutation {
  addEvaluator(input: AddEvaluatorInput!): Evaluator!
}

input AddEvaluatorInput {
  name: String!
  profession: String!
  performanceExp: String!
  appExp: String!
  agExp: String!
  evaluationDate: String!
}
`;

module.exports = typedefs;

В другом файле я создал преобразователи, в данном случае преобразователь:

const { Pool } = require('pg');
const pool = new Pool({...});

const resolvers = {
  Query: {...}
  Mutation: {
    ...
    addEvaluator: async (_, { input }) => {
    const { name, profession, performanceExp, appExp, agExp, evaluationDate } = input;
    const values = [name, profession, performanceExp, appExp, agExp, evaluationDate];
    const query = 'INSERT INTO tb_evaluator (name, profession, performance_exp, app_exp, ag_exp, evaluation_date) VALUES ($1, $2, $3, $4, $5, $6) RETURNING *';

    try {
      const result = await pool.query(query,values);
      return result.rows[0];
    } catch (error) {
      console.error('Error adding evaluation:', error);
      throw new Error('Failed to add evaluation');
    }
  }
}};

Когда я запускаю сервер, я захожу в песочницу сервера Apollo и выполняю эту операцию:

mutation Mutation($input: AddEvaluatorInput!) {
  addEvaluator(input: $input) {
    id
    name
    profession
    performanceExp
    appExp
    agExp
    evaluationDate
  }
}

И во вкладке переменных я установил такие значения:

{
  "input": {
    "agExp": "a",
    "appExp": "b",
    "evaluationDate": "c",
    "name": "d",
    "performanceExp": "e",
    "profession": "f"
  }
}

Но когда я запускаю его, я получаю эту ошибку

"errors": [
   {
     "message": "Cannot return null for non-nullable field Evaluator.performanceExp.",
     "locations": [
       {
         "line": 6,
         "column": 5
       }
     ],
     "path": [
       "addEvaluator",
       "performanceExp"
     ],

Но, помимо ошибки, данные все еще вставляются в мою базу данных pg, поэтому я не знаю, игнорирую ли я эту ошибку или делаю что-то не так, потому что у меня есть другие мутации, ОЧЕНЬ похожие, и Единственная разница заключается в количестве параметров. Кстати, когда я использую эти переменные: PerformanceExp, appExp,agExp и AssessmentDate, или когда я статически устанавливаю их значения в коде, который запускается без ошибок,

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
62
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В конце мутации вы запрашиваете в базе данных запись, которую вы только что вставили:

const result = await pool.query(query,values);
return result.rows[0];

Однако вам не удается преобразовать имена столбцов snake_case обратно в camelCase — в результате все ваши поля performanceExp, appExp, и agExp будут иметь значение null, поскольку сервер GraphQL отбросит performance_exp и т. д. из записи результата перед созданием набора данных JSON для отправки обратно клиенту.

Другие вопросы по теме