리액트 db 연동 채택완료

좀전에 https://sirius7.tistory.com/101 참조하여 필요한 세팅 작업 후 정상적으로 화면이 나왔고 로그인 회원가입등 테스트 다 한 후에 로그아웃을 한 후로 .. 계속 이런 에러가 뜨네요.. 대체 왜 이런걸까요? 어디가 잘못된건지 모르겠네요.. 첨에 몇번 회원가입/로그인/등 테스트 몇 번 할 때는 오류 없었는데 로그아웃 한번 한 후에로 이러네요 ㅎㅎ;;

 

32936023_1724659376.2064.png

 

db.js

Copy
var mysql = require('mysql');

var db = mysql.createConnection({

    host: 'localhost',

    user: 'root',

    password: '1111',

    database: 'board'

});

db.connect();

 

module.exports = db;

 

main.js

Copy
import { Autoplay, Pagination, Navigation } from 'swiper/modules';

import { Swiper, SwiperSlide } from 'swiper/react';

import 'swiper/css';

import 'swiper/css/navigation';

import 'swiper/css/pagination';

 

import { useState } from 'react';

import { useEffect } from 'react';


 

function Login(props) {

    const [id, setId] = useState("");

    const [password, setPassword] = useState("");

   

    return <>

      <h2>로그인</h2>

 

      <div className="form">

        <p><input className="login" type="text" name="username" placeholder="아이디" onChange={event => {

          setId(event.target.value);

        }} /></p>

        <p><input className="login" type="password" name="pwd" placeholder="비밀번호" onChange={event => {

          setPassword(event.target.value);

        }} /></p>

 

        <p><input className="btn" type="submit" value="로그인" onClick={() => {

          const userData = {

            userId: id,

            userPassword: password,

          };

          fetch("http://localhost:3001/login", { //auth 주소에서 받을 예정

            method: "post", // method :통신방법

            headers: {      // headers: API 응답에 대한 정보를 담음

              "content-type": "application/json",

            },

            body: JSON.stringify(userData), //userData라는 객체를 보냄

          })

            .then((res) => res.json())

            .then((json) => {            

              if(json.isLogin==="True"){

                props.setMode("WELCOME");

              }

              else {

                alert(json.isLogin)

              }

            });

        }} /></p>

      </div>

 

      <p>계정이 없으신가요?  <button onClick={() => {

        props.setMode("SIGNIN");

      }}>회원가입</button></p>

    </>

}

 

 

function Signin(props) {

    const [id, setId] = useState("");

    const [password, setPassword] = useState("");

    const [password2, setPassword2] = useState("");

 

    return <>

      <h2>회원가입</h2>

 

      <div className="form">

        <p><input className="login" type="text" placeholder="아이디" onChange={event => {

          setId(event.target.value);

        }} /></p>

        <p><input className="login" type="password" placeholder="비밀번호" onChange={event => {

          setPassword(event.target.value);

        }} /></p>

        <p><input className="login" type="password" placeholder="비밀번호 확인" onChange={event => {

          setPassword2(event.target.value);

        }} /></p>

 

        <p><input className="btn" type="submit" value="회원가입" onClick={() => {

          const userData = {

            userId: id,

            userPassword: password,

            userPassword2: password2,

          };

          fetch("http://localhost:3001/signin", { //signin 주소에서 받을 예정

            method: "post", // method :통신방법

            headers: {      // headers: API 응답에 대한 정보를 담음

              "content-type": "application/json",

            },

            body: JSON.stringify(userData), //userData라는 객체를 보냄

          })

            .then((res) => res.json())

            .then((json) => {

              if(json.isSuccess==="True"){

                alert('회원가입이 완료되었습니다!')

                props.setMode("LOGIN");

              }

              else{

                alert(json.isSuccess)

              }

            });

        }} /></p>

      </div>

 

      <p>로그인화면으로 돌아가기  <button onClick={() => {

        props.setMode("LOGIN");

      }}>로그인</button></p>

    </>

}


 

function Main() {

   

    const [mode, setMode] = useState("");

 

    useEffect(() => {

        fetch("http://localhost:3001/authcheck")

        .then((res) => res.json())

        .then((json) => {        

            if (json.isLogin === "True") {

            setMode("WELCOME");

            }

            else {

            setMode("LOGIN");

            }

        });

    }, []);

 

    let content = null;  

 

    if(mode==="LOGIN"){

        content = <Login setMode={setMode}></Login>

    }

    else if (mode === 'SIGNIN') {

        content = <Signin setMode={setMode}></Signin>

    }

    else if (mode === 'WELCOME') {

        content = <>

        <h2>메인 페이지에 오신 것을 환영합니다</h2>

        <p>로그인에 성공하셨습니다.</p>

        <a href="/logout">로그아웃</a>  

        </>

    }

       

    return (

       

        <div className="container">

           

            <Swiper

                className="visualSwiper"

                modules={[Autoplay, Navigation, Pagination]}

                spaceBetween={0}

                slidesPerView={2}

                scrollbar={{ draggable: true }}

                navigation={{ }}

                pagination={{

                    clickable: true

                }}

                autoplay={{

                    delay: 2500,

                    disableOnInteraction: false,

                }}

                breakpoints={{

                    1024: {

                    slidesPerView: 1,

                    },

                }}

                >

                <SwiperSlide>

                    <div className="visual">

                        <div className="txt">

                            <h1>메인 비주얼1</h1>

                            <p>메인 비주얼 서브 텍스트 입니다. 메인 비주얼 서브 텍스트 입니다.</p>

                        </div>

                    </div>

                </SwiperSlide>

                <SwiperSlide>

                    <div className="visual">

                        <div className="txt">

                            <h1>메인 비주얼2</h1>

                            <p>메인 비주얼 서브 텍스트 입니다. 메인 비주얼 서브 텍스트 입니다.</p>

                        </div>

                    </div>

                </SwiperSlide>

                <SwiperSlide>

                    <div className="visual">

                        <div className="txt">

                            <h1>메인 비주얼3</h1>

                            <p>메인 비주얼 서브 텍스트 입니다. 메인 비주얼 서브 텍스트 입니다.</p>

                        </div>

                    </div>

                </SwiperSlide>

            </Swiper>

       

            <div className="inner">

                <section className="section1">

                    <ul>

                        <li>{content}</li>

                        <li>컨2</li>

                        <li>컨3</li>

                    </ul>

                </section>

            </div>

        </div>

    );

}

 

export default Main;

 

로컬 db 접속도 다 잘되거든요..

 

32936023_1724659534.7225.png

 

 

답변 2개

채택된 답변
+20 포인트

위는 코드 잘못은 아닌 것으로 보입니다.

다음을 확인해보세요

 

1. 현재 mysql 이 정상 구동 되고 있는지 ?

 

2. 패스워드 오류가 없는지 (위 이미지 기준으로 패스워드 쪽 문제)

 

3. 커넥트 과다로 인한, 접속 차단은 아닌지 (sql 툴은 정상 접속되고 웹만 접속 안됨)

 

-----

 

mysql 재시작 + 서버 종료 (3000포트) 

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

리액트가 db와 연동되는 게 아닌 백엔드가 따로 있으시지 않나요?

리액트 자체는 프론트 라이브러리인 관계로, 노드이든, php든 별도로 백엔드를 구성하셔야 합니다

로그인 후 평가할 수 있습니다

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인
🐛 버그신고