Обновление модели с помощью GraphQL Mutation

У меня возникли проблемы с выяснением того, как обновить пользователя с помощью graphQL. Функциональность, к которой я сейчас стремлюсь, заключается в том, чтобы пользователь мог обновлять информацию о своей учетной записи/профиле. У меня есть некоторые настройки для пользователя, такие как поле биографии для его профиля и поле изображения профиля, которое настроено на получение URL-адреса и отображение его в качестве изображения их профиля.

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

Однако я не смог понять, как обновить пользователя напрямую. По сути, я могу обойти это, создав новую модель для «фото профиля» и отправив ее пользователю, но похоже, что это просто дополнительные шаги, которые могут замедлить работу, а также лишить себя возможности узнать что-то новое.

Это модель пользователя. Я пропустил несколько полей из-за того, что точный блок кода большой, но это включает в себя поля «изображение» и «био» (поля, которые я хотел бы обновить), а также ссылку на модель Post, о которой я упоминал выше. который функционирует надлежащим образом.

User.js

const userSchema = new Schema(
    {
        username: {
            type: String,
            required: true,
            unique: true,
            trim: true
        },
        email: {
            type: String,
            required: true,
            unique: true,
            match: [/.+@.+\..+/, 'Must match an email address!']
        },
        password: {
            type: String,
            required: true,
            minlength: 8
        },
        image: {
            type: String
        },
        bio: {
            type: String,
            maxLength: 500
        },
        posts: [
            {
                type: Schema.Types.ObjectId,
                ref: 'Post'
            }
        ],

    },

Ниже представлена ​​мутация в Проводнике, включая переменные и результат.

Explorer Mutation

Преобразователь изображения профиля

        addProfilePic: async (parent, { image }, context) => {
            if (context.user) {
                const updatedUser = await User.findOneAndUpdate(
                    { _id: context.user._id },
                    { image: image },
                    { new: true, runValidators: true }
                );

                return updatedUser;
            }

            throw new AuthenticationError('You need to be logged in!');
        },

typeDefs.js (только актуально)

    type Mutation {
        addProfilePic(_id: ID!, image: String!): Auth
    }

Я заметил, что на странице Explorer он возвращает «null» для пользователя со статусом 200. Меня заставили поверить, что это означает, что он не может даже получить доступ к полю «изображение» у пользователя, чтобы иметь возможность его обновить. По сравнению с другими моими мутациями в отношении пользователей, это настроено очень похоже, и я не уверен, в чем разница.

Я чувствую, что мне не хватает чего-то очень простого в отношении возможности обновления. Мне не удалось найти работающий пример мутации обновления. Может ли кто-нибудь помочь? Мои основные вопросы будут такими:

  1. Почему мутация возвращает «ноль» для пользователя?

  2. Как настроить преобразователь для надлежащего обновления информации об уже созданном объекте?

Спасибо всем, кто может взглянуть и помочь, я буду внимательно следить за ответами на этот пост и буду обновлять любой другой код, который может понадобиться кому-то, чтобы помочь. Я долго не мог обновить информацию, но мой сайт приближается к тому моменту, когда он почти готов, и мне нужно решить эту проблему с обновлением, чтобы двигаться дальше. Благодарю вас!

Быстрое редактирование: я хочу добавить, что упоминается «Аутентификация». Имеются соответствующие заголовки авторизации для извлечения данных. Просто хотел добавить, что, поскольку я очень сомневаюсь, что авторизация имеет к этому какое-то отношение!

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
Приложение для отслеживания бюджета на React js для начинающих
Приложение для отслеживания бюджета на React js для начинающих
Обучение на практике - это проверенная тема для достижения успеха в любой области. Если вы знаете контекст фразы "Практика делает человека...
Стоит ли использовать React в 2022 году?
Стоит ли использовать React в 2022 году?
В 2022 году мы все слышим о трендах фронтенда (React, Vue), но мы не знаем, почему мы должны использовать эти фреймворки, когда их использовать, а...
Как передать состояние или данные в react-router v6
Как передать состояние или данные в react-router v6
react-router - это лучшая библиотека для работы с маршрутизацией в reactjs. С помощью react-router вы передаете состояние или данные от одного...
0
0
33
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

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

В мутации typeDefs я изменил "Auth" на "User",

    type Mutation {
        addProfilePic(_id: ID!, image: String!): User
    }

а затем в самой мутации убрали пользовательское поле вот так:

    mutation addProfilePic($_id: ID!, $image: String!) {
        addProfilePic(_id: $_id, image: $image) {
                _id
                username
                image
        }
    }

Это позволило пользователю обновить информацию о фотографии своего профиля. Надеюсь это поможет!

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