0

Hii I am trying to create a basic application with features of user registration and login

in that, I created node js + express server and connected mango db too here in the registration form user input details enter image description here like name email and password are displaying the server terminal enter image description here but enter image description here

the network response showing error i am using cors also

my registration form code :`

import { useState } from "react";

function Register() {
    const [name, setName] = useState('');
    const [email, setEmail] = useState('');
    const [password, setPassword] = useState('');
    const [error, setError] = useState('');

    async function Registeruser(event) {
        event.preventDefault();

        const response = await fetch('http://localhost:1337/api/register', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({
                name,
                email,
                password
            })
        });

        const data = await response.json();
        if (response.ok) {
            // Registration successful
            console.log('Registration successful');
        } else {
            // Registration failed
            setError(data.error || 'An error occurred');
        }
    }

    return (
        <>
            <div className="maindiv">
                <h2>Register</h2>
                <p></p>
                <form onSubmit={Registeruser}>
                    <input
                        value={name}
                        onChange={(e) => setName(e.target.value)}
                        placeholder="Your Name"
                    />
                    <p></p>
                    <input
                        value={email}
                        onChange={(e) => setEmail(e.target.value)}
                        placeholder="Email"
                    />
                    <p></p>
                    <input
                        value={password}
                        onChange={(e) => setPassword(e.target.value)}
                        placeholder="Password"
                    />
                    <br />
                    <input type="submit" value="Register" />
                </form>
                {error && <p className="error">{error}</p>}
            </div>
        </>
    );
}

export default Register; 

and server index.js code

  const express = require('express');
const app = express();
const mongoose = require('mongoose');
const cors = require('cors');

const User = require('./models/user.model');


app.use(cors()); // Use the cors middleware
app.use(express.json());

mongoose.connect('mongodb+srv://ganeshnandhipati161999:Ganesh123%40%23%24@cluster1ganesh.n9trq4x.mongodb.net/test?retryWrites=true&w=majority', {
  useNewUrlParser: true,
  useUnifiedTopology: true,
})
 
 


  app.post('/api/register', async (req, res) => {
    console.log(req.body)
    try {
      await User.create({
            name: req.body.name,
            email: req.body.email,
            password: newPassword,
        })
        res.json({ status: 'ok' });
    } catch (err) {
        res.json({ status: 'error', error: 'Duplicate email' })
    }
})
 

app.post('/api/login', async (req, res) => {
  const user = await User.findOne({
    email: req.body.email,
    password: req.body.password,
  });
  if (user) {
    return res.json({ status: 'ok', user: true });
  } else {
    return res.json({ status: 'error', user: false });
  }
});

app.listen(1337, () => {
  console.log('Server started on 1337');
});   
    ```

why it showing like these 

I am expecting user registration and a successful registration and login and details will store in mongo db database    
Ganesh
  • 11
  • 2

1 Answers1

1

If you see your catch block of this code :

app.post('/api/register', async (req, res) => {
    console.log(req.body)
    try {
      await User.create({
            name: req.body.name,
            email: req.body.email,
            password: newPassword,
        })
        res.json({ status: 'ok' });
    } catch (err) {
        res.json({ status: 'error', error: 'Duplicate email' })
    }
})

Here your code goes into the catch block, and in the catch block, you are sending the response. In this response, you have sent the message "Duplicate email"

I suggest you check in your catch block by checking the error, and what errors you are getting, fixing this will solve your issue.

Harsh nahta
  • 176
  • 1
  • 14