В области действия сокращенного свойства нет значения. Либо объявите один, либо предоставьте инициализатор

Я новичок в TypeScript.

Я получаю сообщение об ошибке. В области видимости для сокращенного свойства firstName не существует значения. Либо объявите его, либо предоставьте инициализатор. при использовании Prisma с Next.js. Я пытаюсь создать нового пользователя в своей БД.

Модель пользователя в schema.prisma

model User {
  id            Int      @id @default(autoincrement())
  email         String   @unique
  firstName     String
  middleName    String?
  lastName      String
  dateOfBirth   DateTime
  mobileNumber  String   @unique
  idType        String
  idNumber      String   @unique
  idExpirtyDate DateTime
  idIssueState  DateTime
  streetAddress String
  suburb        String
  postCode      Int
  state         String
  bsb           Int      @unique
  accountNumber Int      @unique
  payIdType     String
  payId         String   @unique
  createdAt     DateTime @default(now())
  updatedAt     DateTime @updatedAt
}

createUser() функция, как показано ниже.

export async function createUser(user: FormData) {
  const prisma = new PrismaClient()

  await prisma.user.create({
    data: {
      firstName,
      lastName,
      middleName,
      email,
      dateOfBirth,
      mobileNumber,
      idType,
      idNumber,
      idExpirtyDate,
      idIssueState,
      streetAdddress,
      suburb,
      postCode,
      state,
      bsb,
      accountNumber,
      payIdType,
      payId,
    },
  })
}

Ниже показано, где я получаю FormData. Это из компонента.

  async function handleFormData(userData: FormData) {
    'use server'
    await createUser(userData)
  }

Любая помощь приветствуется.

Откуда вы ожидаете получить значение для firstName? Объект FormData?

Unmitigated 26.05.2023 01:39

Да, я только что обновил вопрос. с кодом для FormData. Он поступает непосредственно из формы при отправке формы. <форма action = {handleFormData}>

Nadun Perera 26.05.2023 01:42
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Сокращение {firstName} работает только в том случае, если в области видимости есть переменная с именем firstName, поскольку оно фактически совпадает с {firstName: firstName}.

Вам нужно вручную извлечь параметры из файла FormData.

data : {
    firstName: user.get('firstName'),
    // etc.
}

В качестве альтернативы, если вы хотите просто передать все значения из FormData, вы можете преобразовать его в объект с помощью Object.fromEntries.

data: Object.fromEntries(user)

Спасибо, понял. Мои входные данные в форме имеют одно и то же имя. <input name = "firstName"... Имеет ли это какое-то значение?

Nadun Perera 26.05.2023 01:47

@NadunPerera Нет, не совсем. Имя ввода влияет на имя отправленного параметра (поэтому будет параметр firstName), но вам все равно придется извлекать значение вручную на сервере. Он не будет автоматически создавать для него переменную.

Unmitigated 26.05.2023 01:47

Спасибо. Теперь я получаю сообщение об ошибке Type 'FormDataEntryValue | null» нельзя присвоить типу «строка». Тип 'null' не может быть назначен типу 'string'.ts(2322)

Nadun Perera 26.05.2023 01:52

@NadunPerera Простой способ обойти это, если вы уверены, что получаете строки, - это подтвердить это: user.get('firstName') as string.

Unmitigated 26.05.2023 02:20

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