inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Slack 클론 코딩[실시간 채팅 with React]

회원가입 페이지 만들기

회원가입 버튼 클릭 시 콘솔창에 입력정보들이 나열되지않습니다.

해결된 질문

490

sehun910124

작성한 질문수 10

0

정보를 입력 후 회원가입 버튼을 클릭하면

콘솔창에 제로초님 화면처럼

정보들이 나열되지않습니다!

 

-백 콘솔창

Executing (default): SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME = 'ChannelMembers' AND TABLE_SCHEMA = 'sleact'

Executing (default): SHOW INDEX FROM ChannelMembers FROM sleact

DB 연결 성공

GET /api/users 304 24.697 ms - -

GET /api/users 200 4.038 ms - 5

GET /api/users 304 2.241 ms - -

GET /api/users 304 3.459 ms - -

GET /api/users 304 2.637 ms - -

GET /api/users 304 2.528 ms - -

-회원가입 index

import useInput from '@hooks/useInput';
import { Header, Form, Label, Input,Error, Success, LinkContainer, Button } from "./style";
import fetcher from '@utils/fetcher';
import axios from 'axios';
import React, { useCallback, useState } from "react";
import { Redirect } from "react-router-dom";
import useSWR from 'swr';

const Signup = () => {
    const [email, setEmail] = useState('');
    const [nickname, setNickname] = useState('');
    const [password, setPassword] = useState('');
    const [passwordCheck,  setPasswordCheck] = useState('');
    const {data: userData} = useSWR('/api/users', fetcher);
    const [signupError, setSignUpError] = useState(false);
    const [signUpSuccess, setSignUpSuccess] = useState(false);
    const [mismatchError, setMismatchError] = useState(false);
    
    const onChangeEmail = useCallback (
        (e) => {
            setEmail(e.target.value);
        }, []);

    const onChangeNickname = useCallback (
        (e) => {
            setNickname(e.target.value);
        }, []);

    const onChangePassword = useCallback (
        (e) => {
            setPassword(e.target.value);
            setMismatchError(passwordCheck !== e.target.value);
        },
        [passwordCheck, setPassword],
    );

    const onChangePasswordCheck = useCallback(
        (e) => {
            setPasswordCheck(e.target.value);
            setMismatchError(password !== e.target.value);
        },
        [password, setPasswordCheck],
    );

    const onSubmit = useCallback(
        (e) => {
            e.preventDefault();
            if(!nickname || nickname.trim()) {
                return;
            }
            if(! mismatchError) {
                setSignUpError(false);
                setSignUpSuccess(false);
                axios
                    .post('/api/users', {email, nickname, password })
                    .then(() => {
                        setSignUpSuccess(true);
                    })
                    .catch((error) => {
                        console.log(error.response?.data);
                        setSignUpError(error.response?.data?.code ===403);
                    });
            }
        },
        [email, nickname, password, mismatchError],
    );

    if (userData) {
        return <Redirect to ="/workspace/sleact"/>;
    }

    return (
        <div id="container">
            <Header>Sleact</Header>
            <Form onSubmit={onSubmit}>
                <Label id="email-label">
                    <span>이메일 주소</span>
                    <div>
                        <Input type="email" id="email" name="email" value={email}
                        onChange={onChangeEmail}/>
                    </div>
                </Label>
                <Label id="nickname-label">
                    <span>닉네임</span>
                    <div>
                        <Input type="text" id="nickname" name="nickname" value={nickname}
                        onChange={onChangeNickname}/>
                    </div>
                </Label>
                <Label id="password-label">
                    <span>비밀번호</span>
                    <div>
                        <Input type="password" id="password" name="password" value={password}
                        onChange={onChangePassword}/>
                    </div>
                </Label>
                <Label id="password-check-label">
                    <span>비밀번호 확인</span>
                    <div>
                        <Input type="password" id="password-check" name="password-check" value={passwordCheck}
                        onChange={onChangePasswordCheck}/>
                    </div>
               
                    {mismatchError && <Error>비밀번호가 일치하지 않습니다.</Error>}
                    {!nickname && <Error>닉네임을 입력해주세요</Error>}
                    {signupError && <Error>이미 가입된 이메일입니다.</Error>}
                    {signUpSuccess && <Success>회원 가입되었습니다! 로그인해주세요.</Success>}
                </Label>
                <Button type="submit">회원가입</Button>
                </Form>
                <LinkContainer>
                    이미 회원이신가요?&nbsp;
                    <a href="/login">로그인 하러 가기</a>
                </LinkContainer>
        </div>
    );
};


export default Signup;

 

-개발자도구 콘솔창


-개발자도구 네트워크

  1. 요청 URL:

    http://localhost:3090/api/users

  2. 요청 메서드:

    GET

  3. 상태 코드:

    304 Not Modified

  4. 원격 주소:

    [::1]:3090

  5. 리퍼러 정책:

    strict-origin-when-cross-origin

  6. 응답 헤더소스 보기

    1. access-control-allow-credentials:

      true

    2. connection:

      close

    3. date:

      Wed, 26 Apr 2023 05:29:10 GMT

    4. etag:

      W/"5-fLbvuYullyqbUJDcLlF/4U0SywQ"

    5. vary:

      Origin

    6. x-powered-by:

      Express

  7. 요청 헤더소스 보기

    1. Accept:

      application/json, text/plain, /

    2. Accept-Encoding:

      gzip, deflate, br

    3. Accept-Language:

      ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7

    4. Connection:

      keep-alive

    5. Host:

      localhost:3090

    6. If-None-Match:

      W/"5-fLbvuYullyqbUJDcLlF/4U0SywQ"

    7. Referer:

      http://localhost:3090/signup

    8. sec-ch-ua:

      "Chromium";v="112", "Google Chrome";v="112", "Not:A-Brand";v="99"

    9. sec-ch-ua-mobile:

      ?0

    10. sec-ch-ua-platform:

      "Windows"

    11. Sec-Fetch-Dest:

      empty

    12. Sec-Fetch-Mode:

      cors

    13. Sec-Fetch-Site:

      same-origin

    14. User-Agent:

      Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36

react 웹팩 typescript socket.io babel 클론코딩

답변 2

0

sehun910124

앗 해결했습니다... 간단한거였네요

0

sehun910124

POST /api/users 201 561.890 ms - 2

GET /api/users 200 2.822 ms - 5

GET /api/users 304 1.003 ms - -

GET /api/users 304 2.734 ms - -




회원가입은 되는거같은데 콘솔창에 뜨지않네요..!

콘솔창엔 굳이안떠도 상관은없는건가요

기본 셋팅과 관련하여

0

91

1

초기 셋팅 back과 front만 남겨두고 다 지운 후 진행 방법

0

96

2

focus 시에만 화면 업데이트 되는 이유 + 해결방법

0

148

2

useEffect 개수 관리

0

109

2

라이브러리 서치 방법

0

103

2

함수 정의 패턴

0

77

1

npm run dev 에러

0

152

3

npx webpack 후 에러

0

178

2

'void' 형식 식의 truthiness를 테스트할 수 없습니다.ts(1345)

0

142

2

사용자 가입시 에러발생 (TypeError: Cannot read properties of null (reading 'addMembers')

1

177

2

초기세팅중 packge.json 에러떠요

0

154

2

CORS - Access-Control-Allow-Origin 누락 문제

0

429

3

로그인 페이지 무한 새로고침 현상

0

598

2

Module not found: Error: Can't resolve './App' 에러

0

952

1

배포 방법

0

295

2

npm run dev 시 빌드가 매우 느려졌습니다

0

987

2

alias 경로 설정 오류

0

448

2

fetcher 함수의 data 값이 두번 찍히는 이유

0

274

1

제네릭 질문

0

217

2

ts-node 대신 tsx 사용여부

0

373

1

배포 관련 질문

0

247

1

[nginx + https] 서비스를 실행하면 niginx가 아닌 서비스 화면을 보여주게 하고 싶습니다.

0

385

2

[배포하기] webpack에 aws 퍼블릭 IPv4 주소 와 포트 주소를 작성하고 나서 빌드후 실행하면 오류가 발생합니다.

0

336

1

users 호출 시 쿠키가 담기지 않는 이슈 질문드립니다.

0

247

2