Вопрос или проблема
Я столкнулся с ошибкой при тестировании моего API в Postman. Ошибка возникает, когда я пытаюсь создать новую запись в таблице etl_users_project с использованием Prisma. Вот фрагмент кода и сообщение об ошибке:
Неверный вызов `prisma.etl_users_project.create()`:
{
data: {
user_name: "Arun",
project_code: "BIS",
~~~~~~~~~~~~
etl_projects: {
connect: {
project_code: "BIS"
}
},
etl_user_master: {
connect: {
id: 10
}
},
? crt_dtm?: DateTime | Null,
? crt_user_id?: String | Null,
? updt_dtm?: DateTime | Null,
? updt_user_id?: String | Null
}
}
Неизвестный аргумент `project_code`. Доступные параметры отмечены ?.
at Dn (C:\Users\mendrev\Downloads\BISWebAppZip\BISWeb\Backend\node_modules\@prisma\client\runtime\library.js:114:8082)
at Mn.handleRequestError (C:\Users\mendrev\Downloads\BISWebAppZip\BISWeb\Backend\node_modules\@prisma\client\runtime\library.js:121:7396)
at Mn.handleAndLogRequestError (C:\Users\mendrev\Downloads\BISWebAppZip\BISWeb\Backend\node_modules\@prisma\client\runtime\library.js:121:7061)
at Mn.request (C:\Users\mendrev\Downloads\BISWebAppZip\BISWeb\Backend\node_modules\@prisma\client\runtime\library.js:121:6745)
at async l (C:\Users\mendrev\Downloads\BISWebAppZip\BISWeb\Backend\node_modules\@prisma\client\runtime\library.js:130:9633)
at async saveUserProject (file:///C:/Users/mendrev/Downloads/BISWebAppZip/BISWeb/Backend/controllers/etl_UserProjectNew.js:32:32) {
clientVersion: '5.21.1'
}
Что я пробовал:
Проверил, что project_code правильно определен в схеме Prisma.
Проверил отношения и соединения в схеме.
Убедился, что клиент Prisma обновлен.
Фрагмент схемы:
Вот соответствующая часть моей схемы Prisma:
Схема Prisma:
model etl_user_master {
id Int @id @default(autoincrement())
network_id String @db.VarChar(50)
name String @db.VarChar(100)
email String @unique @db.VarChar(100)
enabled Boolean? @default(true)
etl_users_project etl_users_project?
}
model etl_projects {
project_code String @id @db.VarChar(100)
project_name String @db.VarChar(100)
owner String? @db.VarChar(100)
owner_email String? @db.VarChar(100)
secondaryOwner String? @db.VarChar(100)
secondary_owner_email String? @db.VarChar(100)
start_date DateTime? @db.Date
enable Boolean?
crt_dtm DateTime? @db.Timestamp(6)
crt_user_id String? @db.VarChar(20)
updt_dtm DateTime? @db.Timestamp(6)
updt_user_id String? @db.VarChar(20)
etl_users_project etl_users_project[]
}
model etl_users_project {
uid Int @id @default(autoincrement())
user_name String @db.VarChar(100)
project_code String @db.VarChar(100)
crt_dtm DateTime? @db.Timestamp(6)
crt_user_id String? @db.VarChar(20)
updt_dtm DateTime? @db.Timestamp(6)
updt_user_id String? @db.VarChar(20)
etl_projects etl_projects @relation(fields: [project_code], references: [project_code], onDelete: NoAction, onUpdate: NoAction, map: "fk_project_code")
etl_user_master etl_user_master @relation(fields: [uid], references: [id], onDelete: NoAction, onUpdate: NoAction, map: "fk_user_id")
}
Почему я получаю эту ошибку и как я могу ее исправить? Любая помощь будет весьма признательна
Мой код на React Js Backend:
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
// Сохранить пользователя и код проекта
const saveUserProject = async (req, res) => {
const { user_name, project_code } = req.body;
try {
if (!user_name || !project_code) {
return res.status(400).json({ msg: 'Обязательные поля: имя пользователя и код проекта' });
}
// Найти пользователя по имени
const user = await prisma.etl_user_master.findFirst({
where: { name: user_name }
});
if (!user) {
return res.status(404).json({ msg: 'Пользователь не найден' });
}
// Убедиться, что проект существует
const project = await prisma.etl_projects.findUnique({
where: { project_code: project_code }
});
if (!project) {
return res.status(404).json({ msg: 'Проект не найден' });
}
// Создать проект пользователя
const newUserProject = await prisma.etl_users_project.create({
data: {
user_name: user_name,
project_code: project_code,
etl_projects: {
connect: { project_code: project_code }
},
etl_user_master: {
connect: { id: user.id }
}
}
});
res.json({ status: 'success', data: newUserProject });
} catch (error) {
console.error(error);
res.status(500).json({ msg: 'Внутренняя ошибка сервера' });
}
};
export {
saveUserProject,
};
Ответ или решение
Ошибка в Prisma: Неизвестный аргумент project_code в вызове prisma.etl_users_project.create()
При разработке и тестировании API с использованием Prisma вы можете столкнуться с ошибками, связанными с несовпадением полей или аргументов. В вашем случае ошибка Unknown argument project_code in prisma.etl_users_project.create()
указывает на то, что аргумент project_code
не распознается в методе prisma.etl_users_project.create()
. Давайте подробно разберем, как решить эту проблему.
Анализ проблемы
Из вашего описания видно, что вы пытаетесь создать новую запись в таблице etl_users_project
с помощью следующего фрагмента кода:
const newUserProject = await prisma.etl_users_project.create({
data: {
user_name: user_name,
project_code: project_code, // Вызывает ошибку
etl_projects: {
connect: { project_code: project_code }
},
etl_user_master: {
connect: { id: user.id }
}
}
});
Ошибка указывает на то, что в модели etl_users_project
аргумент project_code
не может быть напрямую указан в data
. Это происходит из-за того, что project_code
уже связан с моделью etl_projects
через поле etl_projects
и не требуется для создания новой записи в etl_users_project
.
Решение проблемы
Чтобы исправить эту ошибку, вам нужно удалить project_code
из объекта data
в вызове prisma.etl_users_project.create()
. Вместо этого используйте только поля, которые разрешены в модели etl_users_project
.
Ваша исправленная версия кода будет выглядеть следующим образом:
const newUserProject = await prisma.etl_users_project.create({
data: {
user_name: user_name,
etl_projects: {
connect: { project_code: project_code }
},
etl_user_master: {
connect: { id: user.id }
}
}
});
Таким образом, вы исключили аргумент project_code
, что должно устранить проблему.
Дополнительные рекомендации
-
Проверка схемы: Убедитесь, что ваша Prisma схема правильно спроектирована. На данный момент поле
project_code
не должно напрямую присутствовать вetl_users_project
, если вы планируете использовать связи с другими моделями. -
Обновление и миграции: Если вы изменяли схему, не забудьте запустить команды
prisma migrate dev
илиprisma generate
для обновления вашей базы данных и пересоздания Prisma Client. -
Отладка: Если ошибка повторяется, добавьте отладочные оператор, чтобы просмотреть значение
req.body
. Это поможет проверить, действительно ли вы передаете все необходимые данные. -
Документация Prisma: В случае возникновения другой ошибки обратитесь к документации Prisma, которая содержит обширный раздел по работе с моделями и их связями.
Заключение
С устранением аргумента project_code
из вызова prisma.etl_users_project.create()
ваша проблема должна быть решена. Следуя приведенным рекомендациям и исправлениям, вы сможете эффективно работать с Prisma и продолжить дальнейшую разработку вашего API.