Ты не в ту сторону и не в ту теорию уходишь. Внимательней изучай основы: типы данных (числа, строки, булевые, массивы, объекты, null, undefined). Ты должен четко видеть и понимать где что. Какие методы ты к ним применишь, как получишь - это уже другой вопрос. Но если ты в единицу времени не отличаешь строку от объекта, поверь - это крах и идти дальше некуда.
Вот почитай:
Николай, привет!
Спасибо!
Так я знаю, что базовые понимания хромают, от этого и постоянные уходы в сторону и к теории(
Ну и мало практики, согласен.
Да, ты определенно мало понимаешь, что делаешь :)
И главная проблема в том, что ты даже не сращиваешь типы данных. То есть тут уже как раз не вопрос в более высокоуровневых библиотеках, а в базовах вещах в принципе. Вот твой код
Давай его разберем.
Вот у тебя идет вызов призма-метода на создание поста с передачей в него данных в data
А какой тип у data?
Что ты там пытаешься передать? title и text. Какие у них типы?
То есть титл - обязательно строка должна быть, а text - не обязательный (undefined) или строка или null.
А что ты делаешь?
То есть у тебя переменная равно переменная или Объект? А с чего вдруг объект? У тебя что, title или text может быть объектом? Уж в крайнем случае тебе надо было сделать так:
Но title у тебя на вход итак обязательно строка, зачем его проверять?
Я тебе более того скажу: если бы ты даже вот так сделал:
то у тебя не было бы проблем здесь с титлом и текстом, у тебя там другая ошибка:
Призма ругается на то, что у тебя не передан CreatedBy, что вполне логично, ведь у тебя же это поле в призма-схеме обязательное. https://github.com/linklib/gribok-prisma/blob/94458e23ae35e773b31e1e9ae4a03ea4eb59baa5/prisma/schema.prisma#L125-L126
Откуда его взять? Это же текущий пользователь и его просто надо взять из контекста, проверив, что он есть.
Но и это еще не все. У тебя сам резолвер ругается:
То есть то, что ты пытаешься вернуть, это не то, что он ожидает. Что у тебя в схему мутации прописано?
Возвращаемый type - Post. А ты что пытаешься вернуть в мутации?
Так почему же { data: post, } (что есть суть Объект со свойством post, тип которому Post)? А не просто post. То есть ты возвращаешь {post: Post} вместо Post.
Знаешь чем все это объясняется? Большими перерывами в практике и малыми объемами этой самой практики. Типы и прочее - это все ты оттачивал на фронте. И очень странно, что здесь ты начал с типами плавать.
Ну и еще момент: если в ctx.prisma.post.create ты передаешь data, то почему ты в параметры мутации прописал where? Нельзя было переименовать в data? Не будь таким великим последователем копипасты.
Отправил ПР: https://github.com/linklib/gribok-prisma/pull/2
Изучай и исправляйся.
Николай, посмотри, пожалуйста, коммит: https://github.com/linklib/gribok-prisma/commit/94458e23ae35e773b31e1e9ae4a03ea4eb59baa5
Расширил тип Mutation для создания поста. Но "забодай меня комар", если понимаю, что делаю(((
Дима, очень странный ты вопрос задаешь. AuthPayload не выполняет никаких функций, кроме как своих прямых - структура возвращаемых данных. Вот ровно как и у любого другого GraphQL-типа. Там прописаны поля и данные возвращаемые должны соответствовать. А вот что я на стороне фронта с этим буду делать - это уже совершенно другой вопрос. И все вот это мало относится к твоему изначальному вопросу. Ты спрашивал "как получить данные для создания записи". Я тебе сказал как. Ты полез в "чтение данных". Разберись сначала с ответом на твой вопрос, а потом в сторону полезешь.
Вопрос: тип AuthPayload какие функции выполняет? В описании есть, что это 'Объект ответа мутации пользователя'. Если мутация прошла ,то он возвращает данные пользователя?
Ты подобные типы чуть ли не везде используешь, надо понять, что это)
Спасибо, изучаю!
Дима, привет!
Бежать можно было в соседние файлы :)
Смотри: для чтения в GraphQL используются Type и скаляры. А для входящих параметров используются InputType. В нексусе первые ты создаешь методом objectType, а вторые создаются методом inputObjectType.
Для примера рассмотрим мутацию сброса пароля resetPasswordProcessor. В ней на вход требуется аргумент where: ResetPasswordProcessorWhereInput!
То есть здесь два параметра: User и code.
Все. Далее смотрим уже сам резолвер. Там у нас входящие параметры доступны в объекте args (что вторым атрибутом залетает). Только обрати внимание на этот блок:
К сожалению, нексус-плагин не совсем корректно генерит типы и если просто передать args.where, он там ругается. Приходится вот так более явно задавать типы. В общем, попробуй, поиграйся и если что, выливай с --no-verify, я подправлю и напишу что и как.
Николай, приветствую!
Сунулся разбираться с мутациями - забуксовал.
добавляю тип мутации создания поста.
На create() ожидаемо ругается - нужны данные для создания нового поста.
Нужна помощь: что делать и куда бечь...