Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 시험장소변경
- vue 설정
- 서울근교두루치기
- 큐넷 사실확인서
- 큐넷 시험 변경
- 광명김치찌개
- 큐넷 4대보험미가입
- 경기도광명돼지집
- vuetify 설치
- 벤큐 EX2510S 후기
- 벤큐 EX2510S
- 4대보험미가입 경력증명서
- vue prettier
- HTML CSS Support
- 정보처리기사 시험장도 변경
- EX2510S음질
- 큐넷 시험장소 변경
- vue 로그인
- vue eslint설정
- 큐넷 사대보험
- BENQ EX2510S REVIEW
- 큐넷 필기시험장소 변경
- 큐넷 폐업 사대보험 미가입
- 큐넷 폐업
- vue.js 로그인
- 벤큐 EX2510
- 큐넷 4대보험
- 광명돼지집
- 경기도광명맛집추천
- eslint prettier차이
Archives
- Today
- Total
코딩 발걸음 - 한발두발개발
React Api를 이용하여 Database에서 Data 가져오기 본문
728x90
클라이언트 서버가 아닌
먼저 Database에 접근할 백엔드 서버를 구축한다.
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
const port = 3001;
const mysql = require('mysql');
const db = mysql.createPool({
host : '127.0.0.1',
user : 'root',
password : 'root',
database : 'react_db'
});
app.get('/', (req, res) => {
res.send('연결 되었습니다.')
});
app.get('/api/userList', (req, res) => {
db.query("SELECT * FROM react_db.user", (err, data) => {
if (err) {
console.log('err');
res.send(err);
} else{
console.log('success');
res.send(data);
}
});
});
app.listen(port, ()=>{
console.log(`Connect at http://localhost:${port}`);
});
2.프론트서버 package.json에 proxy를 설정해준다.
{
"name": "reactstudy",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^5.14.1",
"@testing-library/react": "^11.2.7",
"@testing-library/user-event": "^12.8.3",
"express": "^4.17.1",
"mysql": "^2.18.1",
"react": "^17.0.2",
"react-dom": "^17.0.2",
"react-router-dom": "^5.2.0",
"react-scripts": "4.0.3",
"web-vitals": "^1.1.2"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": [
"react-app",
"react-app/jest"
]
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
},
//프록시 설정!
"proxy" : "http://localhost:3001/"
}
프록시를 설정하지 않고 아래처럼 요청할 경우
fetch("http://localhost:3001/api/userList", reqOption).then((res) => res.json())
.then(data => console.log(data));
위와 같은 오류가 발생한다.
'교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)'정책을 위반했다는 내용이다.
간단히 요청하는 서버의 포트와 응답해주는 서버의 포트가 다를 때 응답을 해줄수 없다는 내용이다. 이러한 문제를 해결하기 위에 위의 package.json에서 proxy를 설정했다.
proxy를 설정하고 아래와처럼 요청 url를 수정해준다.
fetch("/api/userList", reqOption).then((res) => res.json())
.then(data => console.log(data));
프론트 서버에서 fetch(혹은 axios )를 이용하여 data를 가져온다.
import './css/common.css';
import { useState} from 'react';
function UserList() {
//정보가져오기
function getUserList () {
let reqOption = {
method : "get",
headers : {
"content-type" : "application/json"
}
}
fetch("/api/userList", reqOption).then((res) => res.json())
.then(data => console.log(data));
}
getUserList();
return (
<div className="contents">
</div>
)
}
export default UserList;
잘가지고 온 화면이다.
'개발 > React.js' 카테고리의 다른 글
React UI Library (0) | 2021.07.16 |
---|---|
React - 함수형 Component 와 클래스형 Component의 차이 (0) | 2021.07.16 |
Client 서버와 Express 서버 동시에 실행하기 (feat. Concurrently) (0) | 2021.07.14 |
리액트 와 CSide Rendering vs Server Side Rendering (CSR SSR 차이) 그리고 MPA 와 SPA (0) | 2021.07.14 |
리액트 Router (Feat. react router dom) (0) | 2021.07.13 |