-
글쓴이글
-
2021년 7월 2일 18:56 #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요청이 서버로 전달되어서 요청도착이라는 문구가 콘솔창에 찍히도록 하고 싶은데
도움 요청드립니다
2021년 7월 2일 20:14 #11125
정재현참가자클라이언트는 3000포트
서버는 5000포트로 둘 다 띄워놓고 cors 에러는
const cors = require('cors');
app.use(cors()); 으로 해결했습니다.리액트는 빌드를하고 서버만 켜야 하나요?
2021년 7월 2일 20:20 #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 페이지로 들어가면 크롬 콘솔창에 이런것이 찍히는데 어떤 의미일까요?
2021년 7월 3일 21:15 #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포트로 도달할거라 생각하는데 아닌건가요?
2021년 7월 3일 21:46 #11160
codingapple키 마스터둘다 띄워놓아야 실시간으로 개발이 가능합니다
http://localhost:5000/list 여기로 get요청하면
서버에 짜놓은 /list 라우트에 걸리는게 아니라 * 라우트에 걸리는 것 같은데요
2021년 7월 3일 22:25 #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})
});
})2021년 7월 3일 23:37 #11165
codingapple키 마스터ejs라는 html 파일을 보낼 필요는 없습니다 리액트는 html 파일 하나로 개발합니다
그냥 데이터만 DB에서 뽑아서 res.send 아니면 res.json 이런걸로 보내줍시다
-
글쓴이글
- 답변은 로그인 후 가능합니다.