Помощь с выводом данных через axios. И запись через fastify в бд

Дали задание сделать форму регистрации. Сказали нужно с помощью axios выполнить http-запрос на сервер fastify и записать это в бд с помощью sql-запроса. Я новичок и особо ничего не понимаю, смог сделать только часть а дальше не идёт. Было бы круто, если бы вы смогли помочь хотя бы с частью кода, а лучше всего если получиться объяснить как это работает. Или покидать ссылок с ютуба, для обучения.

<template>

    <div class="form">
      <h1 class="form__title">{{ formTitle }} / <a href="#" class="form__link" @click="toggleForm">{{ formButton }}</a></h1>
      <div v-if="!isRegistrationForm">

        <div class="form__group">
          <input class="form__input" placeholder=" " v-model.trim="email" @blur="validateEmail" id="email-user">
          <label class="form__label">Email</label>
          <span v-if="emailError" class="form__error">{{ emailError }}</span>
        </div>

        <div class="form__group">
          <input class="form__input" placeholder=" " type="password" v-model.trim="password" @blur="validatePassword" id="password-user">
          <label class="form__label">Пароль</label>
          <span v-if="passwordError" class="form__error">{{ passwordError }}</span>
        </div>

        <div class="form__group">
          <input type="checkbox" class="form-check-input" id="exampleCheck1">
          <label class="form-check-label" for="exampleCheck1">Запомнить меня</label>
        </div>

        <div>
          <button type = 'sumbit' id = 'sumbit' class="form__button">Войти</button><a class="forgetpass" href="#">Забыли пароль?</a>
        </div>

      </div>

      <div v-else>

        <div class="form__group">
          <input class="form__input" placeholder=" " v-model.trim="name" @blur="validateName" id="name-user">
          <label class="form__label">Имя</label>
          <span v-if="nameError" class="form__error">{{ nameError }}</span>
        </div>

        <div class="form__group">
          <input class="form__input" placeholder=" " v-model.trim="email" @blur="validateEmail" @input="emailError = email ? '' : emailError">
          <label class="form__label">Email</label>
          <span v-if="emailError" class="form__error">{{ emailError }}</span>
        </div>
        
        <div class="form__group">
          <input class="form__input" placeholder=" " type="password" v-model.trim="password" @blur="validatePassword">
          <label class="form__label">Пароль</label>
          <span v-if="passwordError" class="form__error">{{ passwordError }}</span>
        </div>

        <div class="form__group">
          <input class="form__input" placeholder=" " type="password" v-model.trim="confirmPassword" @blur="validateConfirmPassword">
          <label class="form__label">Проверка пароля</label>
          <span v-if="confirmPasswordError" class="form__error">{{ confirmPasswordError }}</span>
        </div>

        <div>
          <button class="form__button">Зарегистрироваться</button>
        </div>

      </div>
    </div>
</template>

<script>
import axios from 'axios';
console.log(axios)

export default {
  data() {
    return {
      name: '',
      email: '',
      password: '',
      confirmPassword: ''
    };
  },
        computed: {
        formTitle() {
        return this.isRegistrationForm ? 'Регистрация' : 'Вход'
        },
        formButton() {
        return this.isRegistrationForm ? 'Вход' : 'Регистрация'
        }
    },
    methods: {
        toggleForm() {
        this.isRegistrationForm = !this.isRegistrationForm
        },
        validateName() {
        if (!this.name) {
            this.nameError = ' (Введите имя)'
        } else {
            this.nameError = ''
        }
        },
        validateEmail() {
        if (!this.email) {
            this.emailError = ' (Введите email)'
        } else if (!this.isValidEmail(this.email)) {
            this.emailError = ' (Некорректный email)'
        } else {
            this.emailError = ''
        }
        },
        validatePassword() {
        if (!this.password) {
            this.passwordError = ' (Введите пароль)'
        } else if (this.password.length < 6) {
            this.passwordError = ' (Пароль должен содержать не менее 6 символов)'
        } else {
            this.passwordError = ''
        }
        },
        validateConfirmPassword() {
        if (!this.confirmPassword) {
            this.confirmPasswordError = ' (Введите пароль еще раз)'
        } else if (this.confirmPassword !== this.password) {
            this.confirmPasswordError = ' (Пароли не совпадают)'
        } else {
            this.confirmPasswordError = ''
        }
        },
        isValidEmail(email) {
        const re = /\S+@\S+\.\S+/
        return re.test(email)
        }
    }
    }

</script>


// Стили6
<style>
body {
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
}

.form {
    width: 400px;
    padding: 32px;
    border-radius: 10px;
    box-shadow: 0 4px 16px #ccc;
    font-family: 'Montserrat', sans-serif;
    letter-spacing: 0.5px;
}

.form__input,
.form__button {
    font-family: 'Montserrat', sans-serif;
    font-size: 16px;
    letter-spacing: 0.5px;
}

.form__title {
    text-align: left;
    margin: 0 0 32px 0;
    font-weight: normal;
}

.form__group {
    position:relative;
    margin-bottom: 32px;
}

.form__label {
    position: relative;
    top: 0;
    z-index: -1;
    color: #9e9e9e;
    transition: 0.3s;

}

.form__input {
    width: 100%;
    padding: 0 0 10px 0;
    border: none;
    border-bottom: 1px solid #e0e0e0;
    background-color: transparent;
    outline: none;
    transition: 0.3s;
}

.form__input:focus {
    border-bottom: 1px solid #1aa868;
}

.form__button {
    padding: 10px 20px;
    border: none;
    border-radius: 5px;
    color: white;
    background-color: #00d18f;
    outline: none;
    cursor: pointer;
    transition: 0.3s;
}

.form__button:focus,
.form__button:hover {
    background-color: #00a16e;
}

.form__link {
    font-weight: 500;
    text-decoration: none;
    color: darkgray;
    -webkit-transition: all .3s ease;
        transition: all .3s ease;
}

.form__link:hover {
    color:rgb(113, 113, 113);
}

.forgetpass {
    margin-left: 5%;
    font-weight: 500;
    text-decoration: none;
    color: darkgray;
    -webkit-transition: all .3s ease;
        transition: all .3s ease;
}

.forgetpass:hover {
    color:rgb(113, 113, 113);
    text-decoration: underline(0.3s);
}

.form__error {
  color: red;
}

.form__field.error input {
  border-color: red;
}

.form__field.error .form__error {
  color: red;
} 

</style>

Ответы (0 шт):