Home > Net >  Redirect to another page after form submit
Redirect to another page after form submit

Time:06-08

My application doesn't redirect me to /quiz page after submit the form, browser always show Cannot POST /quiz.

My goal is: i need to redirect from /form page to /quiz page with all the data that has been submitted. Should i add a route for /quiz?

Frontend:

form.jsx:

  const submit = async (e) => {
    /* e.preventDefault(); */
    await FormService.store(storedata)
      .then((res) => {
        console.log(res);
      })
      .catch((err) => {
        return err;
      });
  };

  return (
    <div className="container">
      <div className="header">
        <div className="title">
          <h1>Apply for a Position :</h1>
        </div>
      </div>
      <Divider style={{ maxWidth: '1000px', marginLeft: '250px' }} />
      <div id="content">
        <div id="formWrapper">
          <form
            id="msform"
            method="post"
            action="/quiz"
            enctype="multipart/form-data"
          >
            <fieldset id="fieldset3">
              <h2 >
                Please complete the form below for a position with us.
              </h2>
              <h3 >Reference 0001</h3>
              {/* <div ></div> */}

              <div >
                <label for="CV">
                  Upload CV <span>*</span>:
                </label>
                <input
                  type="file"
                  name="myFile"
                  id="cv"
                  onChange={handleCVChange}
                  accept="application/msword, application/pdf, .docx"
                  placeholder="Cover Letter"
                  required
                />

                <label for="coverLetter">Cover Letter :</label>
                <textarea
                  type="text"
                  name="coverLetter"
                  value={storedata.coverLetter}
                  onChange={handleChange}
                  id="coverLetter"
                  placeholder="Your Cover Letter"
                />
              </div>

              <br />
              <input
                type="submit"
                name="submit"
                
                value="Submit"
                onClick={submit}
              />
            </fieldset>
          </form>
        </div>
      </div>
    </div>
  );
};

export default Form;

quiz.jsx:

import React, { useState, useContext } from 'react'
import { QuizContext } from '../Helpers/Contexts'
import { Questions } from '../Helpers/QuestionBank'


function Quizz() {
    const { score, setscore, setGameState } = useContext(QuizContext)

    const [currQuestion, setcurrQuestion] = useState(0)   //state de numero de current question: 0/1/2
    const [optionChosen, setoptionChosen] = useState("")  //state de l'option choisi: A ou B ou C ou D

    const nextQuestion = () => {
        if (Questions[currQuestion].answer === optionChosen) {
            setscore(score   1);
        }
        //alert(score);
        setcurrQuestion(currQuestion   1);
    }

    const finishQuiz = () => {
        if (Questions[currQuestion].answer === optionChosen) {
            setscore(score   1);
        }
        setGameState("endScreen")
    }



    return (
        <div className='Quiz'>
            <h1>{Questions[currQuestion].prompt}</h1>
            <div className='options'>
                <button onClick={() => setoptionChosen("A")}>{Questions[currQuestion].optionA}</button>
                <button onClick={() => setoptionChosen("B")}>{Questions[currQuestion].optionB}</button>
                <button onClick={() => setoptionChosen("C")}>{Questions[currQuestion].optionC}</button>
                <button onClick={() => setoptionChosen("D")}>{Questions[currQuestion].optionD}</button>
            </div>
            {currQuestion === Questions.length - 1
                ?
                (
                    <button onClick={finishQuiz}>Finish Quiz</button>
                )
                :
                (
                    <button onClick={nextQuestion}>Next Question</button>
                )}
        </div>
    )
}

export default Quizz

backend:

formRoute.js:

const express = require('express')
const router = express.Router()

const FormController = require('../controllers/FormController')
const upload = require('../Middleware/upload')

router.post('/store', upload.single('cv'), FormController.store)



module.exports = router

Formcontroller.js:

const form = require('../models/FormModel')

module.exports = {
    store: (req, res, next) => {
        let candidate = new form({
            coverLetter: req.body.coverLetter,
            cv: req.body.cv
        })
        if (req.file) {
            candidate.cv = req.file.path
        }
        candidate.save()
            .then(response => {
                res.json({
                    success: true,
                    message: 'Candidate added successfully!',
                    data: candidate,
                })
            })
            .catch(error => {
                res.json({
                    success: false,
                    message: 'An error occured!',
                    error: error,
                })
            })
    }
}

src/App.js:

import './App.css';
import { BrowserRouter, Routes, Route } from 'react-router-dom'
import Home from './views/Home/Home';
import Formulaire from './views/Form/Formulaire';
import Quiz from './views/Quiz/Quiz';

function App() {
  return (
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Home />} />
        <Route path="/form" element={<Formulaire />} />
        <Route path="/quiz" element={<Quiz />} />
      </Routes>
    </BrowserRouter>
  );
}

export default App;

CodePudding user response:

First install react-router-dom to your project

Then Replace your form.jsx from this

Form.jsx

import { useNavigate } from 'react-router-dom';

const navigate = useNavigate(); 

const submit = async (e) => {
    /* e.preventDefault(); */
    await FormService.store(storedata)
      .then((res) => {
        console.log(res);
      })
      .catch((err) => {
        return err;
      });
  };

  function gotoQuiz() {
    navigate('/quiz')
  }

  return (
    <div className="container">
      <div className="header">
        <div className="title">
          <h1>Apply for a Position :</h1>
        </div>
      </div>
      <Divider style={{ maxWidth: '1000px', marginLeft: '250px' }} />
      <div id="content">
        <div id="formWrapper">
          <form
            onSubmit={gotoQuiz}
            id="msform"
            method="post"
            enctype="multipart/form-data"
          >
            <fieldset id="fieldset3">
              <h2 >
                Please complete the form below for a position with us.
              </h2>
              <h3 >Reference 0001</h3>
              {/* <div ></div> */}

              <div >
                <label for="CV">
                  Upload CV <span>*</span>:
                </label>
                <input
                  type="file"
                  name="myFile"
                  id="cv"
                  onChange={handleCVChange}
                  accept="application/msword, application/pdf, .docx"
                  placeholder="Cover Letter"
                  required
                />

                <label for="coverLetter">Cover Letter :</label>
                <textarea
                  type="text"
                  name="coverLetter"
                  value={storedata.coverLetter}
                  onChange={handleChange}
                  id="coverLetter"
                  placeholder="Your Cover Letter"
                />
              </div>

              <br />
              <input
                type="submit"
                name="submit"
                
                value="Submit"
                onClick={submit}
              />
            </fieldset>
          </form>
        </div>
      </div>
    </div>
  );
};

export default Form; ````
  • Related