• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Node.js, Express 게시판 리액트 + 익스프레스로 하던 중 질문드립니다

리액트 + 익스프레스로 하던 중 질문드립니다

  • 이 주제에는 8개 답변, 2명 참여가 있으며 codingapple4 년 전에 전에 마지막으로 업데이트했습니다.
9 글 보임 - 1 에서 9 까지 (총 9 중에서)
  • 글쓴이
  • #11122

    정재현
    참가자

    리액트와 익스프레스로 todoapp과 동일한 기능의 다른 예시를 만들어보고 있습니다.

    <List.js>

    import axios from 'axios';
    import { useEffect } from 'react';

    function List(){

        useEffect(function(){
            axios.get('/list').then(function(res){
                console.log(res.data)
            })
        })

        return(
            <div>
                <h1>서버에 저장되어있는 회원 리스트</h1>
            </div>
        );
    }
    export default List;

    /list경로로 get을 axios로 요청을 하였고

    server.js에 아래와 같이 해서 코드를 넣었는데

    app.get('/list', function(요청, 응답){
        console.log('요청도착')
      })

     

    /list 페이지가 호출되면 get요청이 서버로 전달되어서 요청도착이라는 문구가 콘솔창에 찍히도록 하고 싶은데

    도움 요청드립니다

    #11123

    codingapple
    키 마스터

    코드는 잘될 것 같은데 서버쪽 터미널창에 아무것도 안나오나요? 

    그렇다면 혹시 둘다 프로젝트 띄워놓았나요 

    #11125

    정재현
    참가자

    클라이언트는 3000포트

    서버는 5000포트로 둘 다 띄워놓고 cors 에러는

    const cors = require('cors');
    app.use(cors()); 으로 해결했습니다.

    리액트는 빌드를하고 서버만 켜야 하나요?

     

    #11126

    정재현
    참가자

    <server.js>

    //node express 초기 설정
    const express =require('express');
    const cors = require('cors');
    const path = require('path');
    const app = express();

    // cors 초기 설정
    app.use(cors());

    //body-parser
    app.use(express.urlencoded({extended: true})) 

    //몽고디비 연결하기
    const MongoClient = require('mongodb').MongoClient;

    var db;
    MongoClient.connect('mongodb+srv://admin:qwer1234@cluster0.hbhem.mongodb.net/myFirstDatabase?retryWrites=true&w=majority', function(error, client){
        if (error) return console.log(에러);

        db=client.db('flosting');

        const http = require('http').createServer(app);
        http.listen(5000, function(){
            console.log('listening on 5000');
        });    
    });

    // 빌드된 리액트 프로젝트 연결하기
    app.use(express.static(path.join(__dirname, 'react-project/build')))

    app.get('/', function(req, res){
        res.sendFile(path.join(__dirname, 'react-project/build/index.html'))
    })
    //리액트 라우터 기능을 사용할 때 추가해줘야하는 코드
    app.get('*', function(req, res){
        res.sendFile(path.join(__dirname, 'react-project/build/index.html'))
    })

    app.post('/add', function(req, res){
        db.collection('member').insertOne({ 이름: req.body.name, 학교: req.body.univ, 학번: req.body.std_num, 전화번호: req.body.phone, 카카오톡아이디: req.body.kakao }, function(error, result){
            res.send('저장되었습니다!')
        })
    })

    app.get('/list', function(요청, 응답){
        console.log('요청 도착!')
      })

     

     

     

     

    <List.js>

    import axios from 'axios';
    import { useEffect } from 'react';

    function List(){

        useEffect(function(){
            axios.get('http://localhost:5000/list').then(function(res){
                console.log(res.data)
            })
        })

        return(
            <div>
                <h1>서버에 저장되어있는 회원 리스트</h1>
            </div>
        );
    }
    export default List;

     

    이대로 빌드하고 서버만 구동했을 때도 요청도착은 찍히지가 않습니다.

    /list 페이지로 들어가면 크롬 콘솔창에 이런것이 찍히는데 어떤 의미일까요?

    #11135

    codingapple
    키 마스터

    app.get('/list', 

    이걸 다른 라우트보다 좀 위로 옮겨봅시다

    #11159

    정재현
    참가자

    개발을 진행할 때 2개 모두 띄워놓으면 안되나요?

    서버는 5000포트로 클라이언트를 3000포트로 설정 후 

     

    <setProxy.js>

    const createProxyMiddleware = require('http-proxy-middleware');

    module.exports = function(app) {
      app.use(
        '/api',
        createProxyMiddleware({
          target: 'http://localhost:5000',
          changeOrigin: true,
        })
      );
    };

    이것을 설정해주면 클라이언트 3000포트로 접속 후 요청을 보내면 5000포트로 도달할거라 생각하는데  아닌건가요?

    #11160

    codingapple
    키 마스터

    둘다 띄워놓아야 실시간으로 개발이 가능합니다 

    http://localhost:5000/list 여기로 get요청하면

    서버에 짜놓은 /list 라우트에 걸리는게 아니라 * 라우트에 걸리는 것 같은데요 

    #11161

    정재현
    참가자

    주말에도 답변 감사드립니다.

    요청을 받고나서 db에 있는 모든 데이터를 요청을 보냈던 List.js로 결과를 주고 싶은데

    todoapp에서 했던 방법인 아래처럼 작성하나요?

    app.get('/list', function(req, res){

        db.collection('post').find().toArray(function(error, result){
            console.log(result)
            res.render('list.ejs', {posts: result})
        });
    })

     

    #11165

    codingapple
    키 마스터

    ejs라는 html 파일을 보낼 필요는 없습니다 리액트는 html 파일 하나로 개발합니다

    그냥 데이터만 DB에서 뽑아서 res.send 아니면 res.json 이런걸로 보내줍시다 

9 글 보임 - 1 에서 9 까지 (총 9 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠