개발/React.js
React Api를 이용하여 Database에서 Data 가져오기
한발두발개발
2021. 7. 15. 14:52
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;
잘가지고 온 화면이다.