signup
Sun Jul 23 2023 14:22:28 GMT+0000 (Coordinated Universal Time)
Saved by @nelson22
src > dbConfig > dbConfig.ts import mongoose from "mongoose"; export async function connect(){ try { mongoose.connect(process.env.MONGO_URI!); const connection = mongoose.connection; connection.on('connected', () => { console.log("Mongo DB connected"); }); connection.on('error', () => { console.log("Mongo DB connection error"); process.exit(); }) } catch (error) { console.log(error); } } ---------------------------------------------------------------- src > models > userModel.js import mongoose from "mongoose"; const userSchema = new mongoose.Schema({ username:{ type: String, required: [true, 'Please provide username'], unique: true }, email: { type: String, required: [true, 'Please provide email'], unique: true }, password:{ type: String, required: [true, 'Please provide password'] }, isVerified:{ type: Boolean, default: false }, isAdmin:{ type: Boolean, default: false }, forgotPasswordToken: String, forgotPasswordTokenExpiry: Date, verifyToken: String, verifyTokenExpiry: Date }) const Users = mongoose.models.users || mongoose.model('users', userSchema); export default Users; ---------------------------------------------------------------- src > app > api > signup > route.ts import {connect} from '@/dbConfig/dbConfig'; import Users from '@/models/userModel'; import { NextRequest, NextResponse } from 'next/server'; import bcryptjs from 'bcryptjs'; connect() export async function POST(request: NextRequest){ try { const reqBody = await request.json(); const {username, email, password} = reqBody; // check if user email exists const user = await Users.findOne({email}); if(user){ return NextResponse.json({error: 'User already exists'}, {status: 400}); } // hash the password const salt = await bcryptjs.genSalt(10); const hashedPassword = await bcryptjs.hash(password, salt); // save user const newUser = new Users({ username, email, password: hashedPassword }) const savedUser = newUser.save(); return NextResponse.json({ message: 'User saved successfully', success: true, savedUser }) } catch (error: any) { console.log(error); return NextResponse.json({error: error.message}, {status: 500}); } } ---------------------------------------------------------------- src > app > signup > page.tsx "use client"; import React from "react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import axios from "axios"; export default function Signup() { const router = useRouter(); const [user, setUser] = React.useState({ username: "", email: "", password: "", }); const signupUser = async () => { try { const response = axios.post('/api/users/signup', user); console.log(response); router.push('/login'); } catch (error) { console.log(error); } }; return ( <div> <h1 className="page-hd">Sign up</h1> <form> <input type="text" placeholder="name" value={user.username} className="form-input" onChange={(e) => setUser({ ...user, username: e.target.value })} /> <br /> <input type="text" placeholder="email" value={user.email} className="form-input" onChange={(e) => setUser({ ...user, email: e.target.value })} /> <br /> <input type="password" placeholder="password" value={user.password} className="form-input" onChange={(e) => setUser({ ...user, password: e.target.value })} /> <br /> <input type="button" value="Submit" className="btn" onClick={signupUser} /> </form> <Link className="link" href="/login"> Back to login </Link> </div> ); }
Comments