Joyram Das
Joyram Das

Reputation: 1

How can I handle error when using zod and server actions in my next js form?

I am learning nextjs 14 (AppRoute). I want to validate a form using zod in my nextjs project. Under the each form input I want to show error's from zod and if server action failed to insert values(formData) to server or any other error occured in server I want to render that error on top of my form.

This is my form component...

import { registerUser } from "@/app/actions";

export default function RegistrationForm() {
  return (
    <form className='login-form' action={registerUser}>
      <div>
        <label htmlFor='fname'>First Name</label>
        <input type='text' name='firstName' id='fname' />
        {/* if error occured in firstName validation ------> show error about firstName */}
      </div>

      <div>
        <label htmlFor='lname'>Last Name</label>
        <input type='text' name='lastName' id='lname' />
        {/* if error occured in lastName validation ------> show error about lasstName */}
      </div>
      <div>
        <label htmlFor='email'>Email Address</label>
        <input type='email' name='email' id='email' />
        {/* if error occured in email validation ------> show error about email */}
      </div>

      <div>
        <label htmlFor='password'>Password</label>
        <input type='password' name='password' id='password' />
        {/* if error occured in password validation ------> show error about password */}
      </div>

      <button
        type='submit'
        className='bg-[#eb4a36] py-3 rounded-md text-white w-full mt-4'
      >
        Create Account
      </button>
    </form>
  );
}

this is server action...

"use server";

import { createUser } from "@/db/queries";
import { redirect } from "next/navigation";

async function registerUser(formData) {
  try {
    const user = Object.fromEntries(formData);
    const created = await createUser(user);
  } catch (error) {
    throw error.message;
  }

  if (created) {
    redirect("/login");
  }
}

export { registerUser };

createUser function to insert formData into mongoDB

async function createUser(user) {
  try {
    await connectMongo();
    return await userModel.create(user);
  } catch (error) {
    throw error;
  }
}

export {createUser}

So I need help to integrate zod validation and handle error for both client and server side in my project.

Upvotes: 0

Views: 571

Answers (0)

Related Questions