Запрос 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, или когда я статически устанавливаю их значения в коде, который запускается без ошибок,

🤔 А знаете ли вы, что...
React обеспечивает реактивное обновление интерфейса при изменении состояния.


62
1

Ответ:

Решено

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

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

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